using System; using System.Collections.Generic; using System.Linq; using System.Windows.Controls; using System.Windows.Media.Imaging; using InABox.Core; using InABox.DynamicGrid; using InABox.WPF; namespace InABox.DynamicGrid { public abstract class DynamicFormLayoutGrid : DynamicOneToManyGrid where T : Entity, IRemotable, IPersistent, new() { private readonly BitmapImage design = Properties.Resources.design.AsBitmapImage(); public DynamicFormLayoutGrid() { Options.AddRange(DynamicGridOption.RecordCount); ActionColumns.Add(new DynamicImageColumn(DesignImage, DesignClick)); //AddButton("Design", PRSDesktop.Resources.design.AsBitmapImage(), DesignClick); HiddenColumns.Add(x => x.Layout); AddButton("Auto Generate", null, AutoGenerate_Click); AddButton("Duplicate", null, Duplicate_Click); } private bool Duplicate_Click(Button btn, CoreRow[] rows) { if (!rows.Any()) return false; SaveItems(rows.Select(x => { var layout = x.ToObject(); layout.ID = Guid.Empty; return layout; }).ToArray()); return true; } private bool AutoGenerate_Click(Button btn, CoreRow[] rows) { var menu = new ContextMenu(); menu.AddItem("Desktop Layout", null, AddDesktop_Click); menu.AddItem("Mobile Layout", null, AddMobile_Click); menu.IsOpen = true; return false; } private BitmapImage? DesignImage(CoreRow? row) { return row != null ? design : null; } private void AddMobile_Click() { var item = CreateItem(); item.Layout = DFLayout.GenerateAutoMobileLayout(GetVariables()).SaveLayout(); item.Type = DFLayoutType.Mobile; if (EditItems(new[] { item })) { SaveItem(item); Refresh(false, true); OnChanged?.Invoke(this); } } private void AddDesktop_Click() { var item = CreateItem(); item.Layout = DFLayout.GenerateAutoDesktopLayout(GetVariables()).SaveLayout(); item.Type = DFLayoutType.Desktop; if (EditItems(new[] { item })) { SaveItem(item); Refresh(false, true); OnChanged?.Invoke(this); } } private DynamicOneToManyGrid? GetVariableGrid() => EditorGrid.Pages?.FirstOrDefault(x => x is DynamicOneToManyGrid) as DynamicOneToManyGrid; private List GetVariables() => GetVariableGrid()?.Items.ToList() ?? new List(); private void Design(DigitalFormLayout layout) { var variables = GetVariables(); var newVariables = new List(); var form = new DynamicFormDesignWindow { Type = layout.Type }; form.OnCreateVariable += (fieldType) => { if (DynamicVariableUtils.CreateAndEdit(Item, GetVariables(), fieldType, out var variable)) { newVariables.Add(variable); return variable; } return null; }; form.LoadLayout(layout, variables); form.Initialize(); if (form.ShowDialog() == true) { layout.Layout = form.SaveLayout(); SaveItem(layout); var grid = GetVariableGrid(); if (grid is not null) { grid.SaveItems(newVariables.ToArray()); grid.Refresh(false, true); } } } private bool DesignClick(CoreRow? row) { if (row == null) return false; Design(LoadItem(row)); return false; } //public override void SaveItem(DigitalFormLayout item) //{ // bool bActive = item.Active; // foreach (var other in Items.Where(x=>(x != item) && (x.Type == item.Type))) // { // if (item.Active) // { // if (other.Active) // other.Active = false; // } // else // bActive = bActive || other.Active; // } // if (!bActive) // item.Active = true; // base.SaveItem(item); //} protected override void DoDoubleClick(object sender) { DesignClick(SelectedRows.FirstOrDefault()); } } }