FactoryTemplateItemsPanel.xaml.cs 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Windows;
  5. using System.Windows.Controls;
  6. using Comal.Classes;
  7. using InABox.Configuration;
  8. using InABox.Core;
  9. using PRSDesktop.Utils;
  10. using Syncfusion.Windows.ComponentModel;
  11. using Syncfusion.Windows.Controls.Grid;
  12. namespace PRSDesktop
  13. {
  14. /// <summary>
  15. /// Interaction logic for FactoryTemplateItemsPanel.xaml
  16. /// </summary>
  17. public partial class FactoryTemplateItemsPanel : UserControl
  18. {
  19. private readonly List<FactoryTemplateItem> _items = new();
  20. private Type _type = typeof(FactoryTemplateItem);
  21. private FactorySetup settings;
  22. public FactoryTemplateItemsPanel()
  23. {
  24. InitializeComponent();
  25. Grid.Model.RowCount = 0;
  26. Grid.Model.ColumnCount = 6;
  27. Grid.Model.ColumnWidths[0] = 20;
  28. Grid.Model.ColumnWidths[1] = 20;
  29. Grid.Model.ColumnWidths[2] = Grid.ActualWidth - 160;
  30. Grid.Model.ColumnWidths[3] = 50;
  31. Grid.Model.ColumnWidths[4] = 50;
  32. Grid.Model.ColumnWidths[5] = 20;
  33. Grid.Model.HeaderColumns = 0;
  34. }
  35. public IList<T> GetItems<T>() where T : FactoryTemplateItem
  36. {
  37. var result = new List<T>();
  38. foreach (var item in _items)
  39. result.Add((T)item);
  40. return result;
  41. }
  42. public void SetItems<T>(IList<T> items) where T : FactoryTemplateItem
  43. {
  44. settings = new GlobalConfiguration<FactorySetup>().Load();
  45. _items.Clear();
  46. _items.AddRange(items);
  47. _type = typeof(T);
  48. Grid.Model.RowCount = 0;
  49. Grid.Model.RowCount = items.Count + 2;
  50. }
  51. private FactoryTemplateItem CreateItem()
  52. {
  53. return (FactoryTemplateItem)Activator.CreateInstance(_type);
  54. }
  55. private void Grid_SizeChanged(object sender, SizeChangedEventArgs e)
  56. {
  57. Grid.Model.ColumnWidths[2] = e.NewSize.Width - 160;
  58. }
  59. private void Grid_QueryCellInfo(object sender, GridQueryCellInfoEventArgs e)
  60. {
  61. try
  62. {
  63. var row = e.Cell.RowIndex - 1;
  64. var col = e.Cell.ColumnIndex;
  65. switch (col)
  66. {
  67. case 0:
  68. if (row != 0 && row < _items.Count)
  69. GridUtils.SetButtonImage(e.Style, PRSDesktop.Resources.uparrow, Grid.Model, col);
  70. else
  71. GridUtils.SetButtonImage(e.Style, null, Grid.Model, col);
  72. break;
  73. case 1:
  74. if (row < _items.Count - 1)
  75. GridUtils.SetButtonImage(e.Style, PRSDesktop.Resources.downarrow, Grid.Model, col);
  76. else
  77. GridUtils.SetButtonImage(e.Style, null, Grid.Model, col);
  78. break;
  79. case 2:
  80. if (row == -1)
  81. {
  82. e.Style.CellValue = "Item Type";
  83. }
  84. else
  85. {
  86. e.Style.CellType = "ComboBox";
  87. var items = new List<FactoryTemplateItem>();
  88. items.AddRange(settings.TemplateItems);
  89. if (row == _items.Count)
  90. items.Add(new FactoryTemplateItem { Code = "", Description = "Add new..", Qty = 1 });
  91. e.Style.ItemsSource = items.Select(x => new { x.Description }).ToList();
  92. e.Style.DropDownStyle = GridDropDownStyle.AutoComplete;
  93. e.Style.DisplayMember = "Description";
  94. e.Style.ValueMember = "Description";
  95. e.Style.CellValue = row < _items.Count ? _items[row].Description : "Add new..";
  96. }
  97. e.Style.VerticalAlignment = VerticalAlignment.Center;
  98. break;
  99. case 3:
  100. e.Style.CellValue = row == -1 ? "Code" : row < _items.Count ? _items[row].Code : "";
  101. e.Style.HorizontalAlignment = HorizontalAlignment.Center;
  102. e.Style.VerticalAlignment = VerticalAlignment.Center;
  103. break;
  104. case 4:
  105. e.Style.CellValue = row == -1 ? "Qty" : row < _items.Count ? _items[row].Qty.ToString() : "";
  106. e.Style.HorizontalAlignment = HorizontalAlignment.Center;
  107. e.Style.VerticalAlignment = VerticalAlignment.Center;
  108. break;
  109. case 5:
  110. if (row < _items.Count)
  111. GridUtils.SetButtonImage(e.Style, PRSDesktop.Resources.delete, Grid.Model, col);
  112. else
  113. GridUtils.SetButtonImage(e.Style, null, Grid.Model, col);
  114. break;
  115. }
  116. }
  117. catch (Exception err)
  118. {
  119. Logger.Send(LogType.Error, "", string.Format("*** Unknown Error: {0}\n{1}", err.Message, err.StackTrace));
  120. }
  121. }
  122. private void Grid_CommitCellInfo(object sender, GridCommitCellInfoEventArgs e)
  123. {
  124. FactoryTemplateItem item;
  125. if (e.Style.RowIndex > _items.Count)
  126. {
  127. item = CreateItem();
  128. _items.Add(item);
  129. }
  130. else
  131. {
  132. item = _items[e.Style.RowIndex - 1];
  133. }
  134. switch (e.Cell.ColumnIndex)
  135. {
  136. case 2:
  137. item.Description = Convert.ToString(e.Style.CellValue);
  138. var lookup = settings.TemplateItems.Where(x => x.Description.Equals(item.Description)).FirstOrDefault();
  139. item.Code = lookup.Code;
  140. item.Qty = lookup.Qty;
  141. break;
  142. case 3:
  143. item.Code = Convert.ToString(e.Style.CellValue);
  144. break;
  145. case 4:
  146. item.Qty = Convert.ToInt32(e.Style.CellValue.ToString());
  147. break;
  148. }
  149. Grid.Model.RowCount = 0;
  150. Grid.Model.RowCount = _items.Count + 2;
  151. }
  152. private void Grid_CellClick(object sender, GridCellClickEventArgs e)
  153. {
  154. var row = e.RowIndex - 1;
  155. if (row > -1 && row < _items.Count)
  156. {
  157. var item = _items[row];
  158. switch (e.ColumnIndex)
  159. {
  160. case 0:
  161. if (row > 0)
  162. {
  163. _items.Remove(item);
  164. _items.Insert(row - 1, item);
  165. e.Handled = true;
  166. }
  167. break;
  168. case 1:
  169. if (e.RowIndex < settings.Sections.Count - 1)
  170. {
  171. _items.Remove(item);
  172. _items.Insert(row + 1, item);
  173. e.Handled = true;
  174. }
  175. break;
  176. case 5:
  177. _items.Remove(item);
  178. e.Handled = true;
  179. break;
  180. }
  181. if (e.Handled)
  182. {
  183. Grid.Model.RowCount = 0;
  184. Grid.Model.RowCount = _items.Count + 2;
  185. }
  186. }
  187. }
  188. private void Grid_CurrentCellValidated(object sender, SyncfusionRoutedEventArgs args)
  189. {
  190. }
  191. }
  192. }