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 InABox.DynamicGrid;
using InABox.WPF;
using PRSDesktop.Utils;
using Syncfusion.Windows.Controls.Grid;
namespace PRSDesktop
{
///
/// Interaction logic for SetoutStagesPanel.xaml
///
public partial class SetoutStagesPanel : UserControl
{
private readonly List _stages = new();
private Type _type;
private FactorySetup settings;
public SetoutStagesPanel()
{
InitializeComponent();
Grid.Model.RowCount = 1;
Grid.Model.ColumnCount = 7;
Grid.Model.ColumnWidths[0] = 20;
Grid.Model.ColumnWidths[1] = 20;
Grid.Model.ColumnWidths[2] = Grid.ActualWidth - 150;
Grid.Model.ColumnWidths[3] = 50;
Grid.Model.ColumnWidths[4] = 20;
Grid.Model.ColumnWidths[5] = 20;
Grid.Model.ColumnWidths[6] = 20;
Grid.Model.HeaderColumns = 0;
}
private IStageTemplate CreateStage()
{
return (IStageTemplate)Activator.CreateInstance(_type);
}
public IList GetStages() where T : IStageTemplate
{
var result = new List();
foreach (var stage in _stages)
result.Add((T)stage);
return result;
}
public void SetStages(IList stages) where T : IStageTemplate
{
settings = new GlobalConfiguration().Load();
_stages.Clear();
foreach (IStageTemplate stage in stages)
_stages.Add(stage);
_type = typeof(T);
Grid.Model.RowCount = 0;
Grid.Model.RowCount = _stages.Count + 2;
}
private void Grid_SizeChanged(object sender, SizeChangedEventArgs e)
{
Grid.Model.ColumnWidths[2] = e.NewSize.Width - 150;
}
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 < _stages.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 < _stages.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 = "Section Name";
}
else
{
e.Style.CellType = "ComboBox";
var sections = new List();
sections.AddRange(settings.Sections);
if (row == _stages.Count)
sections.Add(new FactorySection { ID = Guid.Empty, Name = "Add new..", Stations = 0 });
e.Style.ItemsSource = sections
.Select(x => new { x.ID, Name = !string.IsNullOrEmpty(x.Group) ? x.Group + " : " + x.Name : x.Name }).ToList();
e.Style.DropDownStyle = GridDropDownStyle.AutoComplete;
e.Style.DisplayMember = "Name";
e.Style.ValueMember = "ID";
e.Style.CellValue = row < _stages.Count ? _stages[row].SectionID : Guid.Empty;
}
e.Style.VerticalAlignment = VerticalAlignment.Center;
break;
case 3:
e.Style.CellValue = row == -1 ? "Time" : row < _stages.Count ? _stages[row].Minutes.ToString() : "";
e.Style.HorizontalAlignment = HorizontalAlignment.Center;
e.Style.VerticalAlignment = VerticalAlignment.Center;
break;
case 4:
if (row == -1)
{
GridUtils.SetButtonImage(e.Style, PRSDesktop.Resources.quality, Grid.Model, col);
}
else if (row < _stages.Count)
{
if (!string.IsNullOrWhiteSpace(_stages[row].QualityChecks))
GridUtils.SetButtonImage(e.Style, PRSDesktop.Resources.quality, Grid.Model, col);
else
GridUtils.SetButtonImage(e.Style, PRSDesktop.Resources.quality.AsGrayScale(), Grid.Model, col);
}
else
{
GridUtils.SetButtonImage(e.Style, null, Grid.Model, col);
}
break;
case 5:
if (row == -1)
{
GridUtils.SetButtonImage(e.Style, PRSDesktop.Resources.link, Grid.Model, col);
}
else if (row < _stages.Count)
{
if (_stages[row].Sequence == SequenceType.Consolidate)
GridUtils.SetButtonImage(e.Style, PRSDesktop.Resources.milestone, Grid.Model, col);
else if (_stages[row].Sequence == SequenceType.Link)
GridUtils.SetButtonImage(e.Style, PRSDesktop.Resources.link, Grid.Model, col);
else
GridUtils.SetButtonImage(e.Style, null, Grid.Model, col);
}
else
{
GridUtils.SetButtonImage(e.Style, null, Grid.Model, col);
}
break;
case 6:
if (row < _stages.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)
{
IStageTemplate stage;
if (e.Style.RowIndex > _stages.Count)
{
stage = CreateStage();
stage.Sequence = SequenceType.Link;
_stages.Add(stage);
}
else
{
stage = _stages[e.Style.RowIndex - 1];
}
switch (e.Cell.ColumnIndex)
{
case 2:
stage.SectionID = (Guid)e.Style.CellValue;
break;
case 3:
stage.Minutes = Convert.ToInt32(e.Style.CellValue.ToString());
break;
}
Grid.Model.RowCount = 0;
Grid.Model.RowCount = _stages.Count + 2;
}
private void Grid_CellClick(object sender, GridCellClickEventArgs e)
{
var row = e.RowIndex - 1;
if (row > -1 && row < _stages.Count)
{
var stage = _stages[row];
switch (e.ColumnIndex)
{
case 0:
if (row > 0)
{
_stages.Remove(stage);
_stages.Insert(row - 1, stage);
e.Handled = true;
}
break;
case 1:
if (e.RowIndex < settings.Sections.Count - 1)
{
_stages.Remove(stage);
_stages.Insert(row + 1, stage);
e.Handled = true;
}
break;
case 4:
var form = new NotesForm
{
Caption = "Please enter the Quality Checks to be performed before starting work on this stage",
Text = _stages[row].QualityChecks
};
if (form.ShowDialog() == true)
_stages[row].QualityChecks = form.Text;
e.Handled = true;
break;
case 5:
switch (_stages[row].Sequence)
{
case SequenceType.None:
_stages[row].Sequence = SequenceType.Link;
break;
case SequenceType.Link:
_stages[row].Sequence = SequenceType.Consolidate;
break;
case SequenceType.Consolidate:
_stages[row].Sequence = SequenceType.None;
break;
}
e.Handled = true;
break;
case 6:
_stages.Remove(stage);
e.Handled = true;
break;
}
if (e.Handled)
{
Grid.Model.RowCount = 0;
Grid.Model.RowCount = _stages.Count + 2;
}
}
}
}
}