using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Windows;
using InABox.Core;
using InABox.Wpf;
using Syncfusion.UI.Xaml.Grid;
namespace InABox.DynamicGrid
{
/*
///
/// Interaction logic for DynamicMultiEditWindow.xaml
///
public partial class DynamicMultiEditWindow : ThemableWindow, IDynamicEditorForm
{
public DynamicMultiEditWindow()
{
InitializeComponent();
}
protected virtual void EndEdit(int row, int col, object value)
{
}
protected virtual void DeleteRow(int row)
{
}
private void Editor_CurrentCellEndEdit(object sender, CurrentCellEndEditEventArgs e)
{
//if (!(Editor.CurrentCellInfo.Column is GridComboBoxColumn))
// EndEdit(e.RowColumnIndex.RowIndex-1, e.RowColumnIndex.ColumnIndex, null);
}
private void OK_Click(object sender, RoutedEventArgs e)
{
DialogResult = true;
Close();
}
private void Cancel_Click(object sender, RoutedEventArgs e)
{
DialogResult = false;
Close();
}
private void CurrentCellActivated(object sender, CurrentCellActivatedEventArgs args)
{
//Skip the selection when it is moved to next row on adding new row.
//bool needToMove = (Editor.IsAddNewIndex(args.PreviousRowColumnIndex.RowIndex)
// //&& !Editor.IsAddNewIndex(args.CurrentRowColumnIndex.RowIndex)
// && (args.ActivationTrigger == ActivationTrigger.Keyboard)
// && (Keyboard.IsKeyDown(Key.Enter) || Keyboard.IsKeyDown(Key.Tab)));
//if (needToMove)
//{
// Dispatcher.BeginInvoke(
// new Action(
// () =>
// {
// Editor.MoveCurrentCell
// (
// new Syncfusion.UI.Xaml.ScrollAxis.RowColumnIndex
// (
// args.PreviousRowColumnIndex.RowIndex-1,
// args.CurrentRowColumnIndex.ColumnIndex
// )
// );
// }
// )
// );
//}
}
private void Delete_Click(object sender, RoutedEventArgs e)
{
DeleteRow(Editor.CurrentCellInfo.RowIndex);
}
private void Editor_CurrentCellValueChanged(object sender, CurrentCellValueChangedEventArgs e)
{
//EndEdit(e.RowColumnIndex.RowIndex - 1, e.RowColumnIndex.ColumnIndex);
}
private void Editor_CurrentCellDropDownSelectionChanged(object sender, CurrentCellDropDownSelectionChangedEventArgs e)
{
//EndEdit(e.RowColumnIndex.RowIndex - 1, e.RowColumnIndex.ColumnIndex, (e.SelectedItem as DataRowView)["ID"]);
}
}*/
/*public class DynamicEditWindow : DynamicMultiEditWindow where T : BaseObject, new()
{
private CoreTable _data;
private readonly DataTable table = new();
private readonly Dictionary updates = new();
public T[] Updates => updates.Values.ToArray();
public event OnCustomiseColumns? OnCustomiseColumns;
public event OnGetEditor? OnGetEditor;
public event OnCreateItem? OnCreateItem;
public event OnGetEditorSequence? OnGetSequence;
private decimal GetSequence(DynamicGridColumn column)
{
if (OnGetSequence != null)
return OnGetSequence.Invoke(column);
return 999M;
}
public void Load(CoreTable data)
{
_data = data;
var dgcs = OnCustomiseColumns?.Invoke(this, null).OrderBy(x => GetSequence(x)).ToArray();
foreach (var dgc in dgcs)
{
var col = data.Columns.FirstOrDefault(x => string.Equals(x.ColumnName, dgc.ColumnName));
if (col != null)
table.Columns.Add(col.ColumnName, col.DataType);
}
foreach (var row in data.Rows)
{
var newrow = table.NewRow();
foreach (var col in dgcs)
if (table.Columns.Contains(col.ColumnName))
newrow[col.ColumnName] = row[col.ColumnName];
table.Rows.Add(newrow);
}
foreach (var dgc in dgcs)
try
{
var editor = OnGetEditor?.Invoke(dgc);
if (editor != null && editor.Editable != Editable.Hidden)
{
GridColumn col = null;
if (editor is TextBoxEditor)
{
col = new GridTextColumn { ColumnSizer = GridLengthUnitType.Star };
}
else if (editor is CodeEditor)
{
col = new GridMaskColumn { Mask = ">a" };
}
else if (editor is CheckBoxEditor)
{
col = new GridCheckBoxColumn();
}
else if (editor is DateTimeEditor)
{
col = new GridDateTimeColumn();
}
else if (editor is DateEditor)
{
col = new GridDateTimeColumn();
}
else if (editor is TimeOfDayEditor)
{
col = new GridTimeSpanColumn();
}
else if (editor is DurationEditor)
{
col = new GridTimeSpanColumn();
}
else if (editor is PINEditor)
{
col = new GridMaskColumn { Mask = "9999" };
}
// //else if (editor is CheckListEditor)
// // element = new CheckListBoxEditorControl();
// //else if (editor is MemoEditor)
// // element = new MemoEditorControl();
else if (editor is LookupEditor || editor is EnumLookupEditor || editor is ComboLookupEditor)
{
var values = (editor as ILookupEditor)?.Values(dgc.ColumnName)?.ToDataTable()?.AsDataView();
col = new GridComboBoxColumn { DisplayMemberPath = "Display", SelectedValuePath = "ID", ItemsSource = values };
}
// //else if (editor is MiscellaneousDocumentEditor)
// // element = new DocumentEditorControl();
// //else if (editor is ImageDocumentEditor)
// // element = new DocumentEditorControl();
// //else if (editor is PDFDocumentEditor)
// // element = new DocumentEditorControl();
else if (editor is CurrencyEditor)
{
col = new GridCurrencyColumn();
}
else if (editor is DoubleEditor)
{
col = new GridNumericColumn { ParsingMode = ParseMode.Double };
}
else if (editor is IntegerEditor)
{
col = new GridNumericColumn { ParsingMode = ParseMode.Int };
}
//else if (editor is InABox.Core.ScriptEditor)
// element = new ScriptEditorControl();
//else if (editor is PopupEditor)
// element = new PopupEditorControl();
//else if (editor is TimestampEditor)
// element = new TimestampEditorControl();
//else if (editor is ColorEditor)
// element = new ColorEditorControl();
if (col != null)
{
col.MappingName = dgc.ColumnName;
col.UseBindingValue = true;
Editor.Columns.Add(col);
}
}
}
catch (Exception e)
{
Logger.Send(LogType.Error, "", string.Format("*** Unknown Error: {0}\n{1}", e.Message, e.StackTrace));
}
}
protected override void EndEdit(int row, int col, object value)
{
if (!updates.ContainsKey(row))
{
if (row < _data.Rows.Count)
updates[row] = _data.Rows[row].ToObject();
else
updates[row] = OnCreateItem?.Invoke();
}
object cur = updates[row];
var property = Editor.Columns[col].MappingName;
var currow = Editor.View.IsAddingNew
? (Editor.View.CurrentAddItem as DataRowView).Row
: table.Rows[row];
var val = value == null ? currow[property] : value;
currow[property] = val;
CoreUtils.SetPropertyValue(cur, property, val);
}
protected override void OnActivated(EventArgs e)
{
base.OnActivated(e);
Editor.ItemsSource = table;
}
protected override void DeleteRow(int row)
{
if (Editor.IsAddNewIndex(row))
Editor.View.CancelNew();
else if (row < table.Rows.Count)
table.Rows.RemoveAt(row);
}
}*/
}