using InitializerModel;
using Microsoft.Win32;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace ConfigEditor.SubPage.EvseConfig
{
public class FirmwareVersionPaneltemViewModel : FirmwareUpdateModel, INotifyPropertyChanged
{
public FirmwareVersionPaneltemViewModel(FirmwareUpdateModel from) {
this.Module = from.Module;
this.Version = from.Version;
this.FirmwareFileName = from.FirmwareFileName;
this.DisplayFileName = System.IO.Path.GetFileName(FirmwareFileName);
}
public string DisplayFileName { get; set; }
public event PropertyChangedEventHandler PropertyChanged;
internal FirmwareUpdateModel GetFirmwareUpdateModel()
{
return new FirmwareUpdateModel()
{
Module = this.Module,
Version = this.Version,
FirmwareFileName = this.FirmwareFileName,
};
}
public void TriggerPropertyChanged()
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(Module)));
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(Version)));
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(FirmwareFileName)));
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(DisplayFileName)));
}
}
///
/// FirmwareVersionPaneltem.xaml 的互動邏輯
///
public partial class FirmwareVersionPaneltem : UserControl
{
//private FirmwareUpdateModel firmware;
public FirmwareVersionPaneltem(string fileFolderPath, int evseIndex)
{
InitializeComponent();
var firmware = new FirmwareUpdateModel();
Init();
//this.firmware = firmware;
this.evseIndex = evseIndex;
//this.DataContext = firmware;
this.ViewModel = new FirmwareVersionPaneltemViewModel(firmware);
this.DataContext = this.ViewModel;
}
public FirmwareVersionPaneltem(string fileFolderPath, FirmwareUpdateModel firmware, int evseIndex)
{
InitializeComponent();
Init();
this.fileFolderPath = fileFolderPath;
//this.firmware = firmware;
this.evseIndex = evseIndex;
this.ViewModel = new FirmwareVersionPaneltemViewModel(firmware);
this.DataContext = ViewModel;
}
public FirmwareUpdateModel GetModel()
{
var toReturn = new FirmwareUpdateModel();
toReturn.Module = ViewModel?.Module;
toReturn.Version = ViewModel?.Version;
toReturn.FirmwareFileName = ViewModel?.FirmwareFileName;
if (string.IsNullOrEmpty(toReturn.Module) ||
string.IsNullOrEmpty(toReturn.Version))
{
return null;
}
return toReturn;
}
private void Init()
{
PredefinedVersions = PredefinedVersionPair.GetWebNames();
var selectionList = PredefinedVersions.Append(customizedString);
this.uxPredefinedFrimware.ItemsSource = selectionList;
//fileSourcePath = firmware.FirmwareFileName;
//firmware.DisplayFileName = System.IO.Path.GetFileName(firmware.FirmwareFileName);
}
public event EventHandler OnDeleteClicked;
public FirmwareUpdateModel FrimwareModel => ViewModel.GetFirmwareUpdateModel();
private string customizedString = "Customized";
private IEnumerable PredefinedVersions;
private FirmwareVersionPaneltemViewModel ViewModel;
private readonly string fileFolderPath;
private readonly int evseIndex;
private void uxPredefinedFrimware_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
var selectedItem = uxPredefinedFrimware.SelectedItem as string;
if (selectedItem == customizedString)
{
return;
}
if (PredefinedVersions.Contains(selectedItem))
{
var indexedApiVersion = EvseVersion.GetDDApiNameFromWebName(selectedItem, evseIndex);
ViewModel.Module = indexedApiVersion;
//uxFrimwareKey.Text = indexedApiVersion;
ViewModel.TriggerPropertyChanged();
//ReloadViewModel();
}
//uxFrimwareKey.Text =
}
private void uxFrimwareKey_TextChanged(object sender, TextChangedEventArgs e)
{
var versionKey = uxFrimwareKey.Text;
var apiName = EvseVersion.GetApiNameFromDDApiName(versionKey);
var webName = PredefinedVersionPair.GetWebName(apiName);
if (PredefinedVersions.Contains(webName))
{
uxPredefinedFrimware.SelectedItem = webName;
}
else
{
uxPredefinedFrimware.SelectedItem = customizedString;
}
}
private void Delete_Click(object sender, RoutedEventArgs e)
{
OnDeleteClicked?.Invoke(this, null);
}
private void ReloadViewModel()
{
this.DataContext = null;
this.DataContext = ViewModel;
}
private void File_MouseUp(object sender, MouseButtonEventArgs e)
{
if (!(sender is TextBox textBox))
{
return;
}
var dlg = new OpenFileDialog();
try
{
dlg.InitialDirectory = fileFolderPath;
dlg.FileName = ViewModel.DisplayFileName;
}
catch
{
}
var dlgResult = dlg.ShowDialog();
if (dlgResult == true)
{
//TryUpdateFile(dlg.FileName);
ViewModel.FirmwareFileName = dlg.FileName;
ViewModel.DisplayFileName = System.IO.Path.GetFileName(dlg.FileName);
this.DataContext = null;
this.DataContext = ViewModel;
}
}
//private void TryUpdateFile(string fullFilePath)
//{
// string folderPath = System.IO.Path.GetDirectoryName(fullFilePath);
// string fileName = System.IO.Path.GetFileName(fullFilePath);
// if (folderPath == fileFolderPath)
// {
// firmware.FirmwareFileName = fileName;
// this.DataContext = null;
// this.DataContext = firmware;
// return;
// }
// var targetFilePath = System.IO.Path.Combine(fileFolderPath, fileName);
// if (System.IO.File.Exists(targetFilePath))
// {
// MessageBox.Show("file existed");
// return;
// }
// System.IO.File.Copy(fullFilePath, targetFilePath) ;
// firmware.FirmwareFileName = fileName;
// this.DataContext = null;
// this.DataContext = firmware;
//}
}
}