using System;
using System.Linq;
using System.Windows;
using System.Windows.Controls;
using Comal.Classes;
using InABox.Core;
using PRSDesktop.Utils;
using Syncfusion.Windows.Controls.Grid;
namespace PRSDesktop
{
public class TempateSelectedArgs : EventArgs
{
public FactoryTemplate Template { get; set; }
}
public delegate void TemplateSelectedHandler(object sender, TempateSelectedArgs e);
///
/// Interaction logic for SetoutTemplateList.xaml
///
public partial class SetoutTemplateList : UserControl
{
private FactorySetup _settings;
public SetoutTemplateList()
{
InitializeComponent();
Templates = new PackableList();
Grid.Model.ColumnCount = 5;
Grid.Model.ColumnWidths[0] = 0;
Grid.Model.ColumnWidths[1] = 40;
Grid.Model.ColumnWidths[2] = 0;
Grid.Model.ColumnWidths[3] = 100;
Grid.Model.ColumnWidths[4] = 20;
Grid.Model.HeaderColumns = 0;
}
public PackableList Templates { get; }
public event TemplateSelectedHandler TemplateSelected;
private void SelectTemplate(FactoryTemplate template)
{
//Null check makes sure the main page is attached to the event
if (TemplateSelected != null)
TemplateSelected(this, new TempateSelectedArgs { Template = template });
}
public void Load(FactorySetup settings)
{
_settings = settings;
Templates.Clear();
Templates.AddRange(_settings.Templates.OrderBy(x => x.Code));
Grid.Model.RowCount = 0;
Grid.Model.RowCount = Templates.Count + 2;
}
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 == -1)
{
e.Style.CellValue = "ID";
}
else
{
e.Style.CellType = "Static";
e.Style.CellValue = row < Templates.Count ? Templates[row].ID : Guid.Empty;
}
e.Style.VerticalAlignment = VerticalAlignment.Center;
break;
case 1:
if (row == -1)
e.Style.CellValue = "Code";
else
e.Style.CellValue = row < Templates.Count ? Templates[row].Code : "";
e.Style.VerticalAlignment = VerticalAlignment.Center;
break;
case 2:
if (row == -1)
e.Style.CellValue = "Template Name";
else
e.Style.CellValue = row < Templates.Count ? Templates[row].Name : "Add new..";
e.Style.VerticalAlignment = VerticalAlignment.Center;
break;
case 3:
if (row == -1)
{
e.Style.CellValue = "Group";
}
else
{
e.Style.CellType = "ComboBox";
e.Style.ItemsSource = _settings.Groups.Select(x => new { ID = x.Group, Name = x.Group }).ToList();
e.Style.DropDownStyle = GridDropDownStyle.AutoComplete;
e.Style.DisplayMember = "Name";
e.Style.ValueMember = "ID";
e.Style.CellValue = row < Templates.Count ? Templates[row].Group : "Add new..";
}
e.Style.VerticalAlignment = VerticalAlignment.Center;
break;
case 4:
if (row < Templates.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)
{
if (e.Cell.ColumnIndex == 1 || e.Cell.ColumnIndex == 2 || e.Cell.ColumnIndex == 3)
{
FactoryTemplate template = null;
if (e.Style.RowIndex > Templates.Count)
{
template = new FactoryTemplate { ID = Guid.NewGuid() };
foreach (var section in _settings.Sections)
template.Stages.Add(
new StageTemplate
{
SectionID = section.ID,
Sequence = SequenceType.Link,
Minutes = 0,
QualityChecks = section.QualityChecks
}
);
Templates.Add(template);
}
else
{
template = Templates[e.Style.RowIndex - 1];
}
if (e.Cell.ColumnIndex == 1)
template.Code = e.Style.CellValue.ToString();
else if (e.Cell.ColumnIndex == 2)
template.Name = e.Style.CellValue.ToString();
else if (e.Cell.ColumnIndex == 3)
template.Group = e.Style.CellValue.ToString();
Grid.Model.RowCount = 0;
Grid.Model.RowCount = Templates.Count + 2;
}
}
private void Grid_CellClick(object sender, GridCellClickEventArgs e)
{
var row = e.RowIndex - 1;
if (row > -1 && row < Templates.Count)
{
var document = Templates[row];
if (e.ColumnIndex == 4)
{
Templates.Remove(document);
e.Handled = true;
}
}
if (e.Handled)
{
Grid.Model.RowCount = 0;
Grid.Model.RowCount = Templates.Count + 2;
}
if (row > -1 && row < Templates.Count)
SelectTemplate(Templates[row]);
else
SelectTemplate(null);
}
}
}