|
@@ -0,0 +1,286 @@
|
|
|
+using Aitex.Core.UI.MVVM;
|
|
|
+using Aitex.Core.Utilities;
|
|
|
+using MECF.Framework.Common.RecipeCenter;
|
|
|
+using MECF.Framework.Common.Utilities;
|
|
|
+using Prism.Mvvm;
|
|
|
+using PunkHPX8_MainPages.PMs;
|
|
|
+using PunkHPX8_Themes.UserControls;
|
|
|
+using System;
|
|
|
+using System.Collections.Generic;
|
|
|
+using System.Collections.ObjectModel;
|
|
|
+using System.Linq;
|
|
|
+using System.Text;
|
|
|
+using System.Threading.Tasks;
|
|
|
+using System.Windows;
|
|
|
+using System.Windows.Input;
|
|
|
+
|
|
|
+namespace PunkHPX8_MainPages.ViewModels
|
|
|
+{
|
|
|
+ public class VpwRecipeViewModel : BindableBase
|
|
|
+ {
|
|
|
+ private const string ENGINEERING = "Engineering";
|
|
|
+
|
|
|
+ #region 内部变量
|
|
|
+ private Dictionary<string, RecipeNode> _recipeNodeDic = new Dictionary<string, RecipeNode>();
|
|
|
+ private ObservableCollection<RecipeNode> _recipeNodes;
|
|
|
+ private UiRecipeManager _uiRecipeManager = new UiRecipeManager();
|
|
|
+ private Dictionary<string, bool> _propertyValidResultDic = new Dictionary<string, bool>();
|
|
|
+ private VpwRecipe _recipe;
|
|
|
+ private bool _editEnable;
|
|
|
+ private bool _createEnable;
|
|
|
+ private RecipeNode _currentNode;
|
|
|
+ private bool _enable = false;
|
|
|
+ private bool _isEdit = false;
|
|
|
+ #endregion
|
|
|
+
|
|
|
+ #region 属性
|
|
|
+ public ObservableCollection<RecipeNode> RecipeNodes
|
|
|
+ {
|
|
|
+ get { return _recipeNodes; }
|
|
|
+ set { SetProperty(ref _recipeNodes, value); }
|
|
|
+ }
|
|
|
+ public Dictionary<string, bool> PropertyValidResultDic
|
|
|
+ {
|
|
|
+ get { return _propertyValidResultDic; }
|
|
|
+ set { SetProperty(ref _propertyValidResultDic, value); }
|
|
|
+ }
|
|
|
+ public RecipeNode CurrentNode
|
|
|
+ {
|
|
|
+ get { return _currentNode; }
|
|
|
+ set { SetProperty(ref _currentNode, value); }
|
|
|
+ }
|
|
|
+ public bool Enable
|
|
|
+ {
|
|
|
+ get { return _enable; }
|
|
|
+ set { SetProperty(ref _enable, value); }
|
|
|
+ }
|
|
|
+ public bool EditEnable
|
|
|
+ {
|
|
|
+ get { return _editEnable; }
|
|
|
+ set { SetProperty(ref _editEnable, value); }
|
|
|
+ }
|
|
|
+ public bool CreateEnable
|
|
|
+ {
|
|
|
+ get { return _createEnable; }
|
|
|
+ set { SetProperty(ref _createEnable, value); }
|
|
|
+ }
|
|
|
+
|
|
|
+ public VpwRecipe Recipe
|
|
|
+ {
|
|
|
+ get { return _recipe; }
|
|
|
+ set { SetProperty(ref _recipe, value); }
|
|
|
+ }
|
|
|
+
|
|
|
+ #region 指令
|
|
|
+ public ICommand OperationCommand
|
|
|
+ {
|
|
|
+ get;
|
|
|
+ private set;
|
|
|
+ }
|
|
|
+ [IgnorePropertyChange]
|
|
|
+ public ICommand CreateCommand { get; private set; }
|
|
|
+ [IgnorePropertyChange]
|
|
|
+ public ICommand EditCommand { get; private set; }
|
|
|
+ [IgnorePropertyChange]
|
|
|
+ public ICommand SaveRecipeCommand { get; private set; }
|
|
|
+ [IgnorePropertyChange]
|
|
|
+ public ICommand SaveAsRecipeCommand { get; private set; }
|
|
|
+ #endregion
|
|
|
+
|
|
|
+ public VpwRecipeViewModel()
|
|
|
+ {
|
|
|
+ OperationCommand = new DelegateCommand<object>(SelectionChangedAction);
|
|
|
+ CreateCommand = new DelegateCommand<object>(CreateAction);
|
|
|
+ EditCommand = new DelegateCommand<object>(EditAction);
|
|
|
+ SaveRecipeCommand = new DelegateCommand<object>(SaveAction);
|
|
|
+ SaveAsRecipeCommand = new DelegateCommand<object>(SaveAsAction);
|
|
|
+ }
|
|
|
+ #endregion
|
|
|
+
|
|
|
+
|
|
|
+ public void LoadRecipeData()
|
|
|
+ {
|
|
|
+ RecipeNodes = _uiRecipeManager.GetRecipesByType("vpw");
|
|
|
+ _recipeNodeDic.Clear();
|
|
|
+ InitializeDictionary(RecipeNodes);
|
|
|
+ }
|
|
|
+
|
|
|
+ private void InitializeDictionary(ObservableCollection<RecipeNode> nodes)
|
|
|
+ {
|
|
|
+ if (nodes != null)
|
|
|
+ {
|
|
|
+ foreach (var node in nodes)
|
|
|
+ {
|
|
|
+ if (node.NodeType == RecipeNodeType.File)
|
|
|
+ {
|
|
|
+ _recipeNodeDic[node.Name] = node;
|
|
|
+ }
|
|
|
+ InitializeDictionary(node.Children);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private void SelectionChangedAction(object param)
|
|
|
+ {
|
|
|
+ if (_recipeNodeDic.ContainsKey(param.ToString()))
|
|
|
+ {
|
|
|
+ CurrentNode = _recipeNodeDic[param.ToString()];
|
|
|
+ if (CurrentNode.NodeType == RecipeNodeType.File)
|
|
|
+ {
|
|
|
+ if (CurrentNode.RecipeLocation == ENGINEERING)
|
|
|
+ {
|
|
|
+ EditEnable = true;
|
|
|
+ CreateEnable = true;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ EditEnable = false;
|
|
|
+ CreateEnable = false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ Recipe = _uiRecipeManager.LoadRecipe<VpwRecipe>(CurrentNode.RecipeFullFileName);
|
|
|
+ if (Recipe == null)
|
|
|
+ {
|
|
|
+ MessageBox.Show("Invalid Recipe", "Load Recipe", MessageBoxButton.OK, MessageBoxImage.Error);
|
|
|
+ EditEnable = false;
|
|
|
+ CreateEnable = false;
|
|
|
+ }
|
|
|
+ Enable = false;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ if (param.ToString() == ENGINEERING)
|
|
|
+ {
|
|
|
+ CreateEnable = true;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ CreateEnable = false;
|
|
|
+ }
|
|
|
+ CurrentNode = null;
|
|
|
+ Recipe = null;
|
|
|
+ EditEnable = false;
|
|
|
+ Enable = false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private void CreateAction(object param)
|
|
|
+ {
|
|
|
+ RecipeNameDialog recipeNameDialog = new RecipeNameDialog();
|
|
|
+ if (recipeNameDialog.ShowDialog().Value)
|
|
|
+ {
|
|
|
+ if (!CheckNameExist(recipeNameDialog.RecipeName))
|
|
|
+ {
|
|
|
+ Recipe = new VpwRecipe();
|
|
|
+ Recipe.CreateDate = DateTime.Now;
|
|
|
+ Recipe.Ppid = recipeNameDialog.RecipeName;
|
|
|
+ Recipe.Description = recipeNameDialog.RecipeDescription;
|
|
|
+ Enable = true;
|
|
|
+ _isEdit = false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ private void EditAction(object param)
|
|
|
+ {
|
|
|
+ Enable = true;
|
|
|
+ _isEdit = false;
|
|
|
+ }
|
|
|
+ private void SaveAction(object param)
|
|
|
+ {
|
|
|
+ if (CheckValid(_isEdit))
|
|
|
+ {
|
|
|
+ Recipe.SaveDate = DateTime.Now;
|
|
|
+ try
|
|
|
+ {
|
|
|
+ _uiRecipeManager.SaveRecipe<VpwRecipe>(ENGINEERING, Recipe.Ppid, "vpw", Recipe);
|
|
|
+ LoadRecipeData();
|
|
|
+ MessageBox.Show("Save Recipe Success", "Save Recipe", MessageBoxButton.OK, MessageBoxImage.Information);
|
|
|
+ Enable = false;
|
|
|
+ }
|
|
|
+ catch (Exception ex)
|
|
|
+ {
|
|
|
+ MessageBox.Show(ex.Message, "Save Recipe", MessageBoxButton.OK, MessageBoxImage.Error);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ /// <summary>
|
|
|
+ /// 另存为
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="param"></param>
|
|
|
+ private void SaveAsAction(object param)
|
|
|
+ {
|
|
|
+ if (Recipe == null)
|
|
|
+ {
|
|
|
+ MessageBox.Show("Select a Recipe first", "SaveAs Recipe", MessageBoxButton.OK, MessageBoxImage.Error);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ VpwRecipe recipe = new VpwRecipe();
|
|
|
+ if (CheckValid(_isEdit))
|
|
|
+ {
|
|
|
+ RecipeNameDialog recipeNameDialog = new RecipeNameDialog();
|
|
|
+ if (recipeNameDialog.ShowDialog().Value)
|
|
|
+ {
|
|
|
+ if (!CheckNameExist(recipeNameDialog.RecipeName))
|
|
|
+ {
|
|
|
+ recipe = new VpwRecipe();
|
|
|
+
|
|
|
+ recipe = (VpwRecipe)PropertyUtil.Clone(Recipe);
|
|
|
+ recipe.CreateDate = DateTime.Now;
|
|
|
+ recipe.Ppid = recipeNameDialog.RecipeName;
|
|
|
+ recipe.Description = recipeNameDialog.RecipeDescription;
|
|
|
+
|
|
|
+ }
|
|
|
+ else if (recipeNameDialog.RecipeName != null)
|
|
|
+ {
|
|
|
+ MessageBox.Show("Name can not be Null", "Create Recipe", MessageBoxButton.OK, MessageBoxImage.Error);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ try
|
|
|
+ {
|
|
|
+ _uiRecipeManager.SaveRecipe<RdsRecipe>(ENGINEERING, recipe.Ppid, "vpw", recipe);
|
|
|
+ LoadRecipeData();
|
|
|
+ MessageBox.Show("Save As Recipe Success", "SaveAs Recipe", MessageBoxButton.OK, MessageBoxImage.Information);
|
|
|
+ Enable = false;
|
|
|
+ }
|
|
|
+ catch (Exception ex)
|
|
|
+ {
|
|
|
+ MessageBox.Show(ex.Message, "Save As Recipe", MessageBoxButton.OK, MessageBoxImage.Error);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private bool CheckNameExist(string name)
|
|
|
+ {
|
|
|
+ foreach (string item in _recipeNodeDic.Keys)
|
|
|
+ {
|
|
|
+ if (item == name)
|
|
|
+ {
|
|
|
+ MessageBox.Show($"{name} is exsit", "Save Recipe", MessageBoxButton.OK, MessageBoxImage.Error);
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ private bool CheckValid(bool editType)
|
|
|
+ {
|
|
|
+ foreach (string key in _propertyValidResultDic.Keys)
|
|
|
+ {
|
|
|
+
|
|
|
+ bool valid = _propertyValidResultDic[key];
|
|
|
+ if (!valid)
|
|
|
+ {
|
|
|
+ MessageBox.Show($"{key} data invalid", "Save Recipe", MessageBoxButton.OK, MessageBoxImage.Error);
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+}
|