123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779 |
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Linq;
- using System.Reflection;
- using System.Windows;
- using System.Windows.Controls;
- using System.Windows.Data;
- using System.Windows.Media;
- using Venus_Core;
- namespace Aitex.UI.RecipeEditor
- {
- public class RecipeEditorControlViewModel : INotifyPropertyChanged
- {
-
- private Recipe m_currentRecipe;
- public Recipe CurrentRecipe
- {
- get { return m_currentRecipe; }
- set { m_currentRecipe = value; InvokePropertyChanged("CurrentRecipe"); }
- }
-
- public StackPanel GridStackPanel { get; set; }
- List<SolidColorBrush> solidColorBrushes = new List<SolidColorBrush>();
- public StackPanel HeadStackPanel { get; set; }
-
-
- public RecipeEditorControlViewModel()
- {
-
-
-
-
-
-
-
-
-
-
-
- }
- public void OnAddStep()
- {
- if (CurrentRecipe != null)
- {
- RecipeStep recipeStep = new RecipeStep();
- recipeStep.LstUnit.Add(new PressureByPressureModeUnit());
- recipeStep.LstUnit.Add(new TCPUnit());
- recipeStep.LstUnit.Add(new BiasUnit());
- recipeStep.LstUnit.Add(new GasControlUnit());
- recipeStep.LstUnit.Add(new ESCHVUnit());
- recipeStep.LstUnit.Add(new ProcessKitUnit());
- CurrentRecipe.Steps.Add(recipeStep);
- var item = RecipeStepToGrid(recipeStep);
- GridStackPanel.Children.Add(item.Item1);
- }
- }
- public void OnDeleteStep()
- {
- if (CurrentRecipe != null&& CurrentRecipe.Steps.Count>0)
- {
- CurrentRecipe.Steps.RemoveAt(CurrentRecipe.Steps.Count - 1);
- GridStackPanel.Children.RemoveAt(GridStackPanel.Children.Count - 1);
- }
- }
-
-
-
-
- public void LoadRecipe(Recipe recipe)
- {
- GridStackPanel.Children.Clear();
- CurrentRecipe =recipe;
- recipe.Steps.ToList().ForEach(x =>
- {
- var tupleValue = RecipeStepToGrid(x);
- GridStackPanel.Children.Add(tupleValue.Item1);
- });
- LoadHeadStackPanel(recipe);
- }
-
-
-
-
- private void LoadHeadStackPanel(Recipe recipe)
- {
- HeadStackPanel.Children.Clear();
- Type type = recipe.Header.GetType();
- foreach (var propertyInfo in type.GetProperties())
- {
- TextBlock textBlock = new TextBlock();
- textBlock.FontSize = 15;
- textBlock.Text = propertyInfo.Name + ":";
- textBlock.Margin = new Thickness(15, 0, 0, 0);
- textBlock.VerticalAlignment = VerticalAlignment.Center;
- HeadStackPanel.Children.Add(textBlock);
- Binding binding = new Binding()
- {
- Source = recipe.Header,
- Path = new PropertyPath(propertyInfo.Name),
- Mode = BindingMode.TwoWay,
- UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged
- };
- var propertyTypeName = propertyInfo.PropertyType.Name;
- var propertyInfoName=propertyInfo.Name;
- Control control = new Control();
- switch (propertyTypeName)
- {
- case "Int32":
- case "String":
- control = new TextBox();
-
- control.BorderThickness = new Thickness(0);
- control.FontSize = 15;
- control.Foreground = Brushes.Green;
- control.Background = Brushes.Transparent;
- control.VerticalAlignment = VerticalAlignment.Center;
- control.MinWidth = 15;
- control.SetBinding(TextBox.TextProperty, binding);
- if (propertyInfoName == "Name" || propertyInfoName == "CreateTime" || propertyInfoName == "LastModifiedBy")
- {
- (control as TextBox).IsReadOnly = true;
- }
- break;
- case "Boolean":
- control = new CheckBox();
- control.SetBinding(CheckBox.IsCheckedProperty, binding);
- break;
- default:
- control = new ComboBox();
- control.Height = 25;
- control.SetBinding(ComboBox.SelectedItemProperty, binding);
- ItemsControlHelper.SetEnumValuesToItemsSource(control, true);
- break;
- }
- HeadStackPanel.Children.Add(control);
- }
- }
-
-
-
-
-
- private ValueTuple<Grid, List<int>> RecipeStepToGrid(RecipeStep recipeStep)
- {
- Grid grid = new Grid();
- List<int> ints = new List<int>();
- ColumnDefinition col1 = new ColumnDefinition();
- ColumnDefinition col2 = new ColumnDefinition();
- grid.ColumnDefinitions.Add(col1);
- grid.ColumnDefinitions.Add(col2);
- GridOptions.SetShowBorder(grid, true);
- GridOptions.SetLineBrush(grid, Brushes.White);
- GridOptions.SetLineThickness(grid, 1);
- grid.Margin = new Thickness(15, 0, 0, 0);
- Type recipeType = recipeStep.GetType();
- int i = 0;
- foreach (PropertyInfo propertyInfo in recipeType.GetProperties())
- {
- string propertyInfoName = propertyInfo.Name;
- string propertyTypeName = propertyInfo.PropertyType.Name;
- if (propertyInfoName != "LstUnit")
- {
- RowDefinition row1 = new RowDefinition();
- grid.RowDefinitions.Add(row1);
- Binding binding = new Binding()
- {
- Source = recipeStep,
- Path = new PropertyPath(propertyInfoName),
- Mode = BindingMode.TwoWay,
- UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged
- };
- switch (propertyTypeName)
- {
- case "Int32":
- case "String":
- TextBox textBox = new TextBox();
- textBox.SetBinding(TextBox.TextProperty, binding);
- grid.Children.Add(textBox);
- Grid.SetRow(textBox, i);
- Grid.SetColumn(textBox, 1);
- break;
- case "Boolean":
- CheckBox checkBox = new CheckBox();
- checkBox.SetBinding(CheckBox.IsCheckedProperty, binding);
- grid.Children.Add(checkBox);
- Grid.SetRow(checkBox, i);
- Grid.SetColumn(checkBox, 1);
- break;
- default:
- ComboBox comboBox = new ComboBox();
- comboBox.SetBinding(ComboBox.SelectedItemProperty, binding);
- ItemsControlHelper.SetEnumValuesToItemsSource(comboBox, true);
- grid.Children.Add(comboBox);
- Grid.SetRow(comboBox, i);
- Grid.SetColumn(comboBox, 1);
- if (propertyInfo.Name == "PressureUnitMode")
- {
- comboBox.SelectionChanged += ComboBox_SelectionChanged;
- }
- break;
- }
- TextBlock textBlock = new TextBlock();
- textBlock.Text = propertyInfoName;
- grid.Children.Add(textBlock);
- Grid.SetRow(textBlock, i);
- Grid.SetColumn(textBlock, 0);
- i++;
- }
- }
- ints.Add(recipeType.GetProperties().Length);
- int k = 0;
- recipeStep.LstUnit.ToList().ForEach(x =>
- {
- Type unitType = x.GetType();
- foreach (PropertyInfo propertyInfo in unitType.GetProperties())
- {
- Binding binding = new Binding()
- {
- Source = recipeStep.LstUnit[k],
-
- Path = new PropertyPath(propertyInfo.Name),
- Mode = BindingMode.TwoWay,
- UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged
- };
- RowDefinition row1 = new RowDefinition();
- grid.RowDefinitions.Add(row1);
- var item = propertyInfo.PropertyType.Name;
- if (propertyInfo.Name == "UnitName")
- {
- TextBlock textBlock1 = new TextBlock();
-
- textBlock1.Text = propertyInfo.GetValue(x).ToString();
- textBlock1.Foreground = Brushes.Red;
-
- grid.Children.Add(textBlock1);
- Grid.SetRow(textBlock1, i);
- Grid.SetColumn(textBlock1, 1);
- }
- else
- {
- switch (item)
- {
- case "Int32":
- case "String":
- TextBox textBox = new TextBox();
- textBox.BorderBrush = Brushes.Transparent;
- textBox.SetBinding(TextBox.TextProperty, binding);
- grid.Children.Add(textBox);
- Grid.SetRow(textBox, i);
- Grid.SetColumn(textBox, 1);
- break;
- case "Boolean":
- CheckBox checkBox = new CheckBox();
- checkBox.SetBinding(CheckBox.IsCheckedProperty, binding);
- grid.Children.Add(checkBox);
- Grid.SetRow(checkBox, i);
- Grid.SetColumn(checkBox, 1);
- break;
- default:
- ComboBox comboBox = new ComboBox();
- comboBox.BorderBrush = Brushes.Transparent;
-
- string path = propertyInfo.Name;
- comboBox.SetBinding(ComboBox.SelectedItemProperty, binding);
- ItemsControlHelper.SetEnumValuesToItemsSource(comboBox, true);
- grid.Children.Add(comboBox);
- Grid.SetRow(comboBox, i);
- Grid.SetColumn(comboBox, 1);
- break;
- }
- }
- TextBlock textBlock = new TextBlock();
- textBlock.Text = propertyInfo.Name;
- grid.Children.Add(textBlock);
- Grid.SetRow(textBlock, i);
- Grid.SetColumn(textBlock, 0);
- i++;
- }
- ints.Add(unitType.GetProperties().Length);
- k++;
- });
- return new ValueTuple<Grid, List<int>>(grid, ints);
- }
- private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
- {
- if (e.RemovedItems.Count > 0)
- {
- ComboBox comboBox = sender as ComboBox;
- Grid grid = GetParentObject<Grid>(comboBox, "");
- int index= GridStackPanel.Children.IndexOf(grid);
- RecipeStep recipeStep = CurrentRecipe.Steps[index];
- recipeStep.LstUnit.RemoveAt(0);
- if (comboBox.SelectedIndex == 0)
- {
- recipeStep.LstUnit.Insert(0, new PressureByPressureModeUnit());
- }
- else
- {
- recipeStep.LstUnit.Insert(0, new PressureByValveModeUnit());
- }
- GridStackPanel.Children.Remove(grid);
- GridStackPanel.Children.Insert(index, RecipeStepToGrid(recipeStep).Item1);
- }
- }
-
-
-
-
-
-
-
- public T GetParentObject<T>(DependencyObject obj, string name) where T : FrameworkElement
- {
- DependencyObject parent = VisualTreeHelper.GetParent(obj);
- while (parent != null)
- {
- if (parent is T && (((T)parent).Name == name || string.IsNullOrEmpty(name)))
- {
- return (T)parent;
- }
- parent = VisualTreeHelper.GetParent(parent);
- }
- return null;
- }
- private Tuple<DataGrid,List<int>> RecipeStepToDataGrid(RecipeStep recipeStep)
- {
- DataGrid dataGrid = new DataGrid();
- List<int> ints = new List<int>();
- DataTable dataTable = new DataTable();
- dataTable.Columns.Add("Key");
- dataTable.Columns.Add("Value");
- dataGrid.CanUserAddRows = false;
- dataGrid.AutoGenerateColumns = true;
- dataGrid.SelectionUnit = DataGridSelectionUnit.Cell;
- dataGrid.SetValue(System.Windows.Controls.VirtualizingStackPanel.IsVirtualizingProperty, false);
- Type recipeType = recipeStep.GetType();
- foreach (PropertyInfo propertyInfo in recipeType.GetProperties())
- {
- if (propertyInfo.Name != "LstUnit")
- {
- dataTable.Rows.Add(propertyInfo.Name, propertyInfo.GetValue(recipeStep));
- }
- }
- ints.Add(dataTable.Rows.Count);
-
- recipeStep.LstUnit.ToList().ForEach(k =>
- {
-
- Type type = k.GetType();
- ints.Add(type.GetProperties().Length);
- foreach (PropertyInfo propertyInfo in type.GetProperties())
- {
- var name = propertyInfo.Name;
- var value = propertyInfo.GetValue(k);
-
-
- dataTable.Rows.Add(name, value);
- }
- });
- dataGrid.ItemsSource = dataTable.DefaultView;
-
- return new Tuple<DataGrid, List<int>>(dataGrid, ints);
- }
- private void ChangeDataGridRowColor(DataGrid dataGrid,List<int> ints)
- {
- int count = 0;
- for (int i = 0; i < ints.Count; i++)
- {
- for (int j = 0; j < ints[i]; j++)
- {
- dataGrid.UpdateLayout();
- int index = count + j;
- DataGridRow row = dataGrid.ItemContainerGenerator.ContainerFromItem(dataGrid.Items[index]) as DataGridRow;
- row.Background = solidColorBrushes[i];
- }
- count += ints[i];
- }
- }
- private void ChangeGridRowColor(Grid grid, List<int> ints)
- {
- int count = 0;
- for (int i = 0; i < ints.Count; i++)
- {
- for (int j = 0; j < ints[i]; j++)
- {
-
- int index = count + j;
-
-
- }
- count += ints[i];
- }
- }
- #region 旧代码
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- private void CalcRecipeTime()
- {
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- }
- #region INotifyPropertyChanged
- public event PropertyChangedEventHandler PropertyChanged;
- public void InvokePropertyChanged(string propertyName)
- {
- if (PropertyChanged != null)
- {
- PropertyChanged.Invoke(this, new PropertyChangedEventArgs(propertyName));
- }
- }
- #endregion INotifyPropertyChanged
- }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- #endregion
- }
|