using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows;
using System.Windows.Controls;
using Comal.Classes;
using InABox.Configuration;
using InABox.Core;
using PRSDesktop.Utils;
using Syncfusion.Windows.ComponentModel;
using Syncfusion.Windows.Controls.Grid;
namespace PRSDesktop
{
///
/// Interaction logic for FactoryTemplateItemsPanel.xaml
///
public partial class FactoryTemplateItemsPanel : UserControl
{
private readonly List _items = new();
private Type _type = typeof(FactoryTemplateItem);
private FactorySetup settings;
public FactoryTemplateItemsPanel()
{
InitializeComponent();
Grid.Model.RowCount = 0;
Grid.Model.ColumnCount = 6;
Grid.Model.ColumnWidths[0] = 20;
Grid.Model.ColumnWidths[1] = 20;
Grid.Model.ColumnWidths[2] = Grid.ActualWidth - 160;
Grid.Model.ColumnWidths[3] = 50;
Grid.Model.ColumnWidths[4] = 50;
Grid.Model.ColumnWidths[5] = 20;
Grid.Model.HeaderColumns = 0;
}
public IList GetItems() where T : FactoryTemplateItem
{
var result = new List();
foreach (var item in _items)
result.Add((T)item);
return result;
}
public void SetItems(IList items) where T : FactoryTemplateItem
{
settings = new GlobalConfiguration().Load();
_items.Clear();
_items.AddRange(items);
_type = typeof(T);
Grid.Model.RowCount = 0;
Grid.Model.RowCount = items.Count + 2;
}
private FactoryTemplateItem CreateItem()
{
return (FactoryTemplateItem)Activator.CreateInstance(_type);
}
private void Grid_SizeChanged(object sender, SizeChangedEventArgs e)
{
Grid.Model.ColumnWidths[2] = e.NewSize.Width - 160;
}
private void Grid_QueryCellInfo(object sender, GridQueryCellInfoEventArgs e)
{
try
{
var row = e.Cell.RowIndex - 1;
var col = e.Cell.ColumnIndex;
switch (col)
{
case 0:
if (row != 0 && row < _items.Count)
GridUtils.SetButtonImage(e.Style, PRSDesktop.Resources.uparrow, Grid.Model, col);
else
GridUtils.SetButtonImage(e.Style, null, Grid.Model, col);
break;
case 1:
if (row < _items.Count - 1)
GridUtils.SetButtonImage(e.Style, PRSDesktop.Resources.downarrow, Grid.Model, col);
else
GridUtils.SetButtonImage(e.Style, null, Grid.Model, col);
break;
case 2:
if (row == -1)
{
e.Style.CellValue = "Item Type";
}
else
{
e.Style.CellType = "ComboBox";
var items = new List();
items.AddRange(settings.TemplateItems);
if (row == _items.Count)
items.Add(new FactoryTemplateItem { Code = "", Description = "Add new..", Qty = 1 });
e.Style.ItemsSource = items.Select(x => new { x.Description }).ToList();
e.Style.DropDownStyle = GridDropDownStyle.AutoComplete;
e.Style.DisplayMember = "Description";
e.Style.ValueMember = "Description";
e.Style.CellValue = row < _items.Count ? _items[row].Description : "Add new..";
}
e.Style.VerticalAlignment = VerticalAlignment.Center;
break;
case 3:
e.Style.CellValue = row == -1 ? "Code" : row < _items.Count ? _items[row].Code : "";
e.Style.HorizontalAlignment = HorizontalAlignment.Center;
e.Style.VerticalAlignment = VerticalAlignment.Center;
break;
case 4:
e.Style.CellValue = row == -1 ? "Qty" : row < _items.Count ? _items[row].Qty.ToString() : "";
e.Style.HorizontalAlignment = HorizontalAlignment.Center;
e.Style.VerticalAlignment = VerticalAlignment.Center;
break;
case 5:
if (row < _items.Count)
GridUtils.SetButtonImage(e.Style, PRSDesktop.Resources.delete, Grid.Model, col);
else
GridUtils.SetButtonImage(e.Style, null, Grid.Model, col);
break;
}
}
catch (Exception err)
{
Logger.Send(LogType.Error, "", string.Format("*** Unknown Error: {0}\n{1}", err.Message, err.StackTrace));
}
}
private void Grid_CommitCellInfo(object sender, GridCommitCellInfoEventArgs e)
{
FactoryTemplateItem item;
if (e.Style.RowIndex > _items.Count)
{
item = CreateItem();
_items.Add(item);
}
else
{
item = _items[e.Style.RowIndex - 1];
}
switch (e.Cell.ColumnIndex)
{
case 2:
item.Description = Convert.ToString(e.Style.CellValue);
var lookup = settings.TemplateItems.Where(x => x.Description.Equals(item.Description)).FirstOrDefault();
item.Code = lookup.Code;
item.Qty = lookup.Qty;
break;
case 3:
item.Code = Convert.ToString(e.Style.CellValue);
break;
case 4:
item.Qty = Convert.ToInt32(e.Style.CellValue.ToString());
break;
}
Grid.Model.RowCount = 0;
Grid.Model.RowCount = _items.Count + 2;
}
private void Grid_CellClick(object sender, GridCellClickEventArgs e)
{
var row = e.RowIndex - 1;
if (row > -1 && row < _items.Count)
{
var item = _items[row];
switch (e.ColumnIndex)
{
case 0:
if (row > 0)
{
_items.Remove(item);
_items.Insert(row - 1, item);
e.Handled = true;
}
break;
case 1:
if (e.RowIndex < settings.Sections.Count - 1)
{
_items.Remove(item);
_items.Insert(row + 1, item);
e.Handled = true;
}
break;
case 5:
_items.Remove(item);
e.Handled = true;
break;
}
if (e.Handled)
{
Grid.Model.RowCount = 0;
Grid.Model.RowCount = _items.Count + 2;
}
}
}
private void Grid_CurrentCellValidated(object sender, SyncfusionRoutedEventArgs args)
{
}
}
}