|
@@ -10,265 +10,273 @@ using System.Windows.Media.Imaging;
|
|
|
using InABox.Core;
|
|
|
using InABox.DynamicGrid;
|
|
|
using InABox.Scripting;
|
|
|
+using InABox.Wpf;
|
|
|
using InABox.WPF;
|
|
|
using Microsoft.Win32;
|
|
|
using Org.BouncyCastle.Asn1.Mozilla;
|
|
|
using Syncfusion.Windows.Shared;
|
|
|
using UnderlineType = InABox.Core.UnderlineType;
|
|
|
|
|
|
-namespace InABox.DynamicGrid
|
|
|
+namespace InABox.DynamicGrid;
|
|
|
+
|
|
|
+public abstract class DynamicFormLayoutGrid : DynamicOneToManyGrid<DigitalForm, DigitalFormLayout>
|
|
|
{
|
|
|
- public abstract class DynamicFormLayoutGrid : DynamicOneToManyGrid<DigitalForm, DigitalFormLayout>
|
|
|
- {
|
|
|
- private readonly BitmapImage design = Wpf.Resources.design.AsBitmapImage();
|
|
|
+ private readonly BitmapImage design = Wpf.Resources.design.AsBitmapImage();
|
|
|
|
|
|
- protected override void Init()
|
|
|
- {
|
|
|
- base.Init();
|
|
|
+ protected override void Init()
|
|
|
+ {
|
|
|
+ base.Init();
|
|
|
|
|
|
- ActionColumns.Add(new DynamicImageColumn(DesignImage, DesignClick));
|
|
|
- //AddButton("Design", PRSDesktop.Resources.design.AsBitmapImage(), DesignClick);
|
|
|
- HiddenColumns.Add(x => x.Layout);
|
|
|
+ ActionColumns.Add(new DynamicImageColumn(DesignImage, DesignClick));
|
|
|
+ //AddButton("Design", PRSDesktop.Resources.design.AsBitmapImage(), DesignClick);
|
|
|
+ HiddenColumns.Add(x => x.Code);
|
|
|
+ HiddenColumns.Add(x => x.Description);
|
|
|
+ HiddenColumns.Add(x => x.Type);
|
|
|
+ HiddenColumns.Add(x => x.Layout);
|
|
|
|
|
|
- AddButton("Auto Generate", null, AutoGenerate_Click);
|
|
|
- AddButton("Duplicate", null, Duplicate_Click);
|
|
|
- }
|
|
|
+ AddButton("Auto Generate", null, AutoGenerate_Click);
|
|
|
+ AddButton("Duplicate", null, Duplicate_Click);
|
|
|
+ }
|
|
|
|
|
|
- protected override void DoReconfigure(FluentList<DynamicGridOption> options)
|
|
|
- {
|
|
|
- base.DoReconfigure(options);
|
|
|
+ protected override void DoReconfigure(FluentList<DynamicGridOption> options)
|
|
|
+ {
|
|
|
+ base.DoReconfigure(options);
|
|
|
|
|
|
- options.AddRange(DynamicGridOption.RecordCount, DynamicGridOption.ImportData);
|
|
|
- }
|
|
|
+ options.AddRange(DynamicGridOption.RecordCount, DynamicGridOption.ImportData);
|
|
|
+ }
|
|
|
|
|
|
- private DFLayout LoadLayoutFromSpreadsheet(ISpreadsheet spreadsheet)
|
|
|
- {
|
|
|
- return DigitalFormUtils.LoadLayout(spreadsheet);
|
|
|
- }
|
|
|
+ private DFLayout LoadLayoutFromSpreadsheet(ISpreadsheet spreadsheet)
|
|
|
+ {
|
|
|
+ return DigitalFormUtils.LoadLayout(spreadsheet);
|
|
|
+ }
|
|
|
|
|
|
- protected override void DoImport()
|
|
|
+ protected override void DoImport()
|
|
|
+ {
|
|
|
+ var dialog = new OpenFileDialog();
|
|
|
+ dialog.Filter = "Excel Spreadsheet (.xlsx)|*.xlsx";
|
|
|
+ if (dialog.ShowDialog() == true)
|
|
|
{
|
|
|
- var dialog = new OpenFileDialog();
|
|
|
- dialog.Filter = "Excel Spreadsheet (.xlsx)|*.xlsx";
|
|
|
- if (dialog.ShowDialog() == true)
|
|
|
+ try
|
|
|
{
|
|
|
- try
|
|
|
+ DFLayout layout;
|
|
|
+ Dictionary<String, String> variablegroups = new Dictionary<string, string>();
|
|
|
+ using (var fs = new FileStream(dialog.FileName, FileMode.Open, FileAccess.Read, FileShare.Read))
|
|
|
{
|
|
|
- DFLayout layout;
|
|
|
- Dictionary<String, String> variablegroups = new Dictionary<string, string>();
|
|
|
- using (var fs = new FileStream(dialog.FileName, FileMode.Open, FileAccess.Read, FileShare.Read))
|
|
|
- {
|
|
|
- layout = LoadLayoutFromSpreadsheet(new Spreadsheet(fs));
|
|
|
- }
|
|
|
+ layout = LoadLayoutFromSpreadsheet(new Spreadsheet(fs));
|
|
|
+ }
|
|
|
|
|
|
- var dfLayout = CreateItem();
|
|
|
- dfLayout.Code = Path.GetFileNameWithoutExtension(dialog.FileName).ToUpper();
|
|
|
- dfLayout.Description = $"Imported From {Path.GetFileName(dialog.FileName)}";
|
|
|
- dfLayout.Layout = layout.SaveLayout();
|
|
|
- if(EditItems(new DigitalFormLayout[] { dfLayout }))
|
|
|
+ var dfLayout = CreateItem();
|
|
|
+ dfLayout.Code = Path.GetFileNameWithoutExtension(dialog.FileName).ToUpper();
|
|
|
+ dfLayout.Description = $"Imported From {Path.GetFileName(dialog.FileName)}";
|
|
|
+ dfLayout.Layout = layout.SaveLayout();
|
|
|
+ if(EditItems(new DigitalFormLayout[] { dfLayout }))
|
|
|
+ {
|
|
|
+ var newVariables = new List<DigitalFormVariable>();
|
|
|
+ String group = "";
|
|
|
+ foreach (var element in layout.Elements)
|
|
|
{
|
|
|
- var newVariables = new List<DigitalFormVariable>();
|
|
|
- String group = "";
|
|
|
- foreach (var element in layout.Elements)
|
|
|
+ if (element is DFLayoutHeader header)
|
|
|
{
|
|
|
- if (element is DFLayoutHeader header)
|
|
|
- {
|
|
|
- group = header.Header;
|
|
|
- }
|
|
|
- else if (element is DFLayoutField field)
|
|
|
- {
|
|
|
- var variable = new DigitalFormVariable();
|
|
|
- variable.SetFieldType(field.GetType());
|
|
|
- variable.SaveProperties(field.GetProperties());
|
|
|
- variable.Group = group;
|
|
|
- variable.Code = field.Name;
|
|
|
- variable.Description = field.Name;
|
|
|
- newVariables.Add(variable);
|
|
|
- }
|
|
|
+ group = header.Header;
|
|
|
+ }
|
|
|
+ else if (element is DFLayoutField field)
|
|
|
+ {
|
|
|
+ var variable = new DigitalFormVariable();
|
|
|
+ variable.SetFieldType(field.GetType());
|
|
|
+ variable.SaveProperties(field.GetProperties());
|
|
|
+ variable.Group = group;
|
|
|
+ variable.Code = field.Name;
|
|
|
+ variable.Description = field.Name;
|
|
|
+ newVariables.Add(variable);
|
|
|
}
|
|
|
- if(newVariables.Count > 0)
|
|
|
+ }
|
|
|
+ if(newVariables.Count > 0)
|
|
|
+ {
|
|
|
+ var variables = GetVariableGrid();
|
|
|
+ if (variables is not null)
|
|
|
{
|
|
|
- var variables = GetVariableGrid();
|
|
|
- if (variables is not null)
|
|
|
+ var save = new List<DigitalFormVariable>();
|
|
|
+ foreach(var newVariable in newVariables)
|
|
|
{
|
|
|
- var save = new List<DigitalFormVariable>();
|
|
|
- foreach(var newVariable in newVariables)
|
|
|
+ var variable = variables.GetVariable(newVariable.Code);
|
|
|
+ if(variable is not null)
|
|
|
{
|
|
|
- var variable = variables.GetVariable(newVariable.Code);
|
|
|
- if(variable is not null)
|
|
|
+ if(variable.FieldType() != newVariable.FieldType())
|
|
|
{
|
|
|
- if(variable.FieldType() != newVariable.FieldType())
|
|
|
- {
|
|
|
- MessageBox.Show($"Variable [{newVariable.Code}] already exists with a different type!");
|
|
|
- }
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- save.Add(newVariable);
|
|
|
+ MessageBox.Show($"Variable [{newVariable.Code}] already exists with a different type!");
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
- variables.SaveItems(save.ToArray());
|
|
|
- variables.Refresh(false, true);
|
|
|
+ else
|
|
|
+ {
|
|
|
+ save.Add(newVariable);
|
|
|
+ }
|
|
|
}
|
|
|
- }
|
|
|
|
|
|
- Refresh(false, true);
|
|
|
+ variables.SaveItems(save.ToArray());
|
|
|
+ variables.Refresh(false, true);
|
|
|
+ }
|
|
|
}
|
|
|
+
|
|
|
+ Refresh(false, true);
|
|
|
}
|
|
|
- catch(Exception e)
|
|
|
- {
|
|
|
- Logger.Send(LogType.Error, "", CoreUtils.FormatException(e));
|
|
|
- MessageBox.Show($"Error: {e.Message}");
|
|
|
- }
|
|
|
+ }
|
|
|
+ catch(Exception e)
|
|
|
+ {
|
|
|
+ MessageWindow.ShowError("Something went wrong", e);
|
|
|
}
|
|
|
}
|
|
|
+ }
|
|
|
+
|
|
|
+ private bool Duplicate_Click(Button btn, CoreRow[] rows)
|
|
|
+ {
|
|
|
+ if (!rows.Any()) return false;
|
|
|
|
|
|
- private bool Duplicate_Click(Button btn, CoreRow[] rows)
|
|
|
+ SaveItems(rows.Select(x =>
|
|
|
{
|
|
|
- if (!rows.Any()) return false;
|
|
|
+ var layout = x.ToObject<DigitalFormLayout>();
|
|
|
|
|
|
- SaveItems(rows.Select(x =>
|
|
|
- {
|
|
|
- var layout = x.ToObject<DigitalFormLayout>();
|
|
|
- layout.ID = Guid.Empty;
|
|
|
- return layout;
|
|
|
- }).ToArray());
|
|
|
- return true;
|
|
|
- }
|
|
|
+ var newLayout = CreateItem();
|
|
|
+ newLayout.Code = layout.Code;
|
|
|
+ newLayout.Description = layout.Description;
|
|
|
+ newLayout.Type = layout.Type;
|
|
|
+ newLayout.Layout = layout.Layout;
|
|
|
|
|
|
- private bool AutoGenerate_Click(Button btn, CoreRow[] rows)
|
|
|
- {
|
|
|
- var menu = new ContextMenu();
|
|
|
+ return newLayout;
|
|
|
+ }).ToArray());
|
|
|
+ return true;
|
|
|
+ }
|
|
|
|
|
|
- menu.AddItem("Desktop Layout", null, AddDesktop_Click);
|
|
|
- menu.AddItem("Mobile Layout", null, AddMobile_Click);
|
|
|
+ private bool AutoGenerate_Click(Button btn, CoreRow[] rows)
|
|
|
+ {
|
|
|
+ var menu = new ContextMenu();
|
|
|
|
|
|
- menu.IsOpen = true;
|
|
|
+ menu.AddItem("Desktop Layout", null, AddDesktop_Click);
|
|
|
+ menu.AddItem("Mobile Layout", null, AddMobile_Click);
|
|
|
|
|
|
- return false;
|
|
|
- }
|
|
|
+ menu.IsOpen = true;
|
|
|
|
|
|
- private BitmapImage? DesignImage(CoreRow? row)
|
|
|
- {
|
|
|
- return row != null ? design : null;
|
|
|
- }
|
|
|
+ return false;
|
|
|
+ }
|
|
|
|
|
|
- private void AddMobile_Click()
|
|
|
- {
|
|
|
- var item = CreateItem();
|
|
|
+ private BitmapImage? DesignImage(CoreRow? row)
|
|
|
+ {
|
|
|
+ return row != null ? design : null;
|
|
|
+ }
|
|
|
|
|
|
- item.Layout = DFLayout.GenerateAutoMobileLayout(GetVariables()).SaveLayout();
|
|
|
- item.Type = DFLayoutType.Mobile;
|
|
|
+ private void AddMobile_Click()
|
|
|
+ {
|
|
|
+ var item = CreateItem();
|
|
|
|
|
|
- if (EditItems(new[] { item }))
|
|
|
- {
|
|
|
- SaveItem(item);
|
|
|
- Refresh(false, true);
|
|
|
- DoChanged();
|
|
|
- }
|
|
|
- }
|
|
|
+ item.Layout = DFLayout.GenerateAutoMobileLayout(GetVariables()).SaveLayout();
|
|
|
+ item.Type = DFLayoutType.Mobile;
|
|
|
|
|
|
- private void AddDesktop_Click()
|
|
|
+ if (EditItems(new[] { item }))
|
|
|
{
|
|
|
- var item = CreateItem();
|
|
|
+ SaveItem(item);
|
|
|
+ Refresh(false, true);
|
|
|
+ DoChanged();
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
- item.Layout = DFLayout.GenerateAutoDesktopLayout(GetVariables()).SaveLayout();
|
|
|
- item.Type = DFLayoutType.Desktop;
|
|
|
+ private void AddDesktop_Click()
|
|
|
+ {
|
|
|
+ var item = CreateItem();
|
|
|
|
|
|
- if (EditItems(new[] { item }))
|
|
|
- {
|
|
|
- SaveItem(item);
|
|
|
- Refresh(false, true);
|
|
|
- DoChanged();
|
|
|
- }
|
|
|
+ item.Layout = DFLayout.GenerateAutoDesktopLayout(GetVariables()).SaveLayout();
|
|
|
+ item.Type = DFLayoutType.Desktop;
|
|
|
+
|
|
|
+ if (EditItems(new[] { item }))
|
|
|
+ {
|
|
|
+ SaveItem(item);
|
|
|
+ Refresh(false, true);
|
|
|
+ DoChanged();
|
|
|
}
|
|
|
+ }
|
|
|
|
|
|
- private DynamicVariableGrid? GetVariableGrid()
|
|
|
- => EditorGrid.Pages?.FirstOrDefault(x => x is DynamicVariableGrid)
|
|
|
- as DynamicVariableGrid;
|
|
|
+ private DynamicVariableGrid? GetVariableGrid()
|
|
|
+ => EditorGrid.Pages?.FirstOrDefault(x => x is DynamicVariableGrid)
|
|
|
+ as DynamicVariableGrid;
|
|
|
|
|
|
- private List<DigitalFormVariable> GetVariables()
|
|
|
- => GetVariableGrid()?.Items.ToList() ?? new List<DigitalFormVariable>();
|
|
|
+ private List<DigitalFormVariable> GetVariables()
|
|
|
+ => GetVariableGrid()?.Items.ToList() ?? new List<DigitalFormVariable>();
|
|
|
|
|
|
- private void Design(DigitalFormLayout layout)
|
|
|
- {
|
|
|
- var variables = GetVariables();
|
|
|
+ private void Design(DigitalFormLayout layout)
|
|
|
+ {
|
|
|
+ var variables = GetVariables();
|
|
|
|
|
|
- var newVariables = new List<DigitalFormVariable>();
|
|
|
+ var newVariables = new List<DigitalFormVariable>();
|
|
|
|
|
|
- var form = new DynamicFormDesignWindow
|
|
|
- {
|
|
|
- Type = layout.Type
|
|
|
- };
|
|
|
- form.OnCreateVariable += (fieldType) =>
|
|
|
+ var form = new DynamicFormDesignWindow
|
|
|
+ {
|
|
|
+ Type = layout.Type
|
|
|
+ };
|
|
|
+ form.OnCreateVariable += (fieldType) =>
|
|
|
+ {
|
|
|
+ if (DynamicVariableUtils.CreateAndEdit(Item, GetVariables(), fieldType, out var variable))
|
|
|
{
|
|
|
- if (DynamicVariableUtils.CreateAndEdit(Item, GetVariables(), fieldType, out var variable))
|
|
|
- {
|
|
|
- newVariables.Add(variable);
|
|
|
- return variable;
|
|
|
- }
|
|
|
- return null;
|
|
|
- };
|
|
|
- /*form.OnEditVariable += (variable) =>
|
|
|
+ newVariables.Add(variable);
|
|
|
+ return variable;
|
|
|
+ }
|
|
|
+ return null;
|
|
|
+ };
|
|
|
+ /*form.OnEditVariable += (variable) =>
|
|
|
+ {
|
|
|
+ var properties = variable.CreateProperties();
|
|
|
+ if (DynamicVariableUtils.EditProperties(Item, GetVariables(), properties.GetType(), properties))
|
|
|
{
|
|
|
- var properties = variable.CreateProperties();
|
|
|
- if (DynamicVariableUtils.EditProperties(Item, GetVariables(), properties.GetType(), properties))
|
|
|
- {
|
|
|
- variable.SaveProperties(properties);
|
|
|
- return true;
|
|
|
- }
|
|
|
- return false;
|
|
|
- };*/
|
|
|
- form.LoadLayout(layout, variables);
|
|
|
- form.Initialize();
|
|
|
+ variable.SaveProperties(properties);
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ };*/
|
|
|
+ form.LoadLayout(layout, variables);
|
|
|
+ form.Initialize();
|
|
|
|
|
|
- if (form.ShowDialog() == true)
|
|
|
- {
|
|
|
- layout.Layout = form.SaveLayout();
|
|
|
- SaveItem(layout);
|
|
|
+ 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);
|
|
|
- }
|
|
|
+ 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;
|
|
|
+ private bool DesignClick(CoreRow? row)
|
|
|
+ {
|
|
|
+ if (row == null)
|
|
|
+ return false;
|
|
|
|
|
|
- Design(LoadItem(row));
|
|
|
+ Design(LoadItem(row));
|
|
|
|
|
|
- return false;
|
|
|
- }
|
|
|
+ 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());
|
|
|
- }
|
|
|
+ //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());
|
|
|
}
|
|
|
}
|