|
|
@@ -8,6 +8,7 @@ using System.Windows.Controls;
|
|
|
using InABox.Core;
|
|
|
using InABox.Wpf;
|
|
|
using InABox.WPF;
|
|
|
+using MathNet.Numerics;
|
|
|
using NPOI.OpenXmlFormats;
|
|
|
using NPOI.SS.Formula.Functions;
|
|
|
using NPOI.Util.Collections;
|
|
|
@@ -301,6 +302,7 @@ namespace InABox.DynamicGrid
|
|
|
multi.Configure();
|
|
|
}
|
|
|
}
|
|
|
+ OnEditorValueChanged(sender, name, value);
|
|
|
return new();
|
|
|
};
|
|
|
}
|
|
|
@@ -309,9 +311,12 @@ namespace InABox.DynamicGrid
|
|
|
editor.OnFormCustomiseEditor += (sender, items, column, editor) => Editor_OnFormCustomiseEditor(sender, variables, column, editor);
|
|
|
editor.OnEditorValueChanged += (sender, name, value) =>
|
|
|
{
|
|
|
- return DynamicGridUtils.UpdateEditorValue(new[] { item }, name, value);
|
|
|
+ var result = DynamicGridUtils.UpdateEditorValue(new[] { item }, name, value);
|
|
|
+ OnEditorValueChanged(sender, name, value);
|
|
|
+ return result;
|
|
|
};
|
|
|
}
|
|
|
+ editor.OnCreateEditorControl += Editor_OnCreateEditorControl;
|
|
|
|
|
|
editor.OnDefineLookups += o =>
|
|
|
{
|
|
|
@@ -341,6 +346,7 @@ namespace InABox.DynamicGrid
|
|
|
var errors = new List<string>();
|
|
|
foreach(var item in items.Cast<DFLayoutFieldProperties>())
|
|
|
{
|
|
|
+ // Check Codes
|
|
|
if (string.IsNullOrWhiteSpace(item.Code))
|
|
|
{
|
|
|
errors.Add("[Code] may not be blank!");
|
|
|
@@ -360,6 +366,12 @@ namespace InABox.DynamicGrid
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ // Check Read-Only property
|
|
|
+ if(item.ReadOnlyProperty && item.Property.IsNullOrWhiteSpace() && item.Expression.IsNullOrWhiteSpace())
|
|
|
+ {
|
|
|
+ errors.Add("A field cannot be read-only if [Property] or [Expression] have not been set.");
|
|
|
+ }
|
|
|
}
|
|
|
return errors;
|
|
|
};
|
|
|
@@ -367,8 +379,21 @@ namespace InABox.DynamicGrid
|
|
|
return editor.ShowDialog() == true;
|
|
|
}
|
|
|
|
|
|
+ private static void Editor_OnCreateEditorControl(string column, BaseEditor editor, IDynamicEditorControl control)
|
|
|
+ {
|
|
|
+ var properties = (control.Host.GetItems()[0] as DFLayoutFieldProperties)!;
|
|
|
+ if(column == nameof(DFLayoutFieldProperties.ReadOnlyProperty))
|
|
|
+ {
|
|
|
+ if (properties.Property.IsNullOrWhiteSpace())
|
|
|
+ {
|
|
|
+ control.IsEnabled = false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
private static void Editor_OnFormCustomiseEditor(IDynamicEditorForm sender, IList<DigitalFormVariable> vars, DynamicGridColumn column, BaseEditor editor)
|
|
|
{
|
|
|
+ var properties = (sender.Items[0] as DFLayoutFieldProperties)!;
|
|
|
if ((column.ColumnName == "Expression" || column.ColumnName == "ColourExpression") && editor is ExpressionEditor exp)
|
|
|
{
|
|
|
var variables = new List<string>();
|
|
|
@@ -380,6 +405,7 @@ namespace InABox.DynamicGrid
|
|
|
variables.Add(col.ColumnName);
|
|
|
}
|
|
|
}
|
|
|
+ variables.Remove(properties.Code);
|
|
|
variables.Sort();
|
|
|
exp.VariableNames = variables;
|
|
|
}
|
|
|
@@ -397,5 +423,19 @@ namespace InABox.DynamicGrid
|
|
|
Editor_OnFormCustomiseEditor(sender, vars, column, editor);
|
|
|
}
|
|
|
|
|
|
+ private static void OnEditorValueChanged(IDynamicEditorForm sender, string name, object value)
|
|
|
+ {
|
|
|
+ if(name == nameof(DFLayoutFieldProperties.Property))
|
|
|
+ {
|
|
|
+ var properties = (sender.Items[0] as DFLayoutFieldProperties)!;
|
|
|
+ var grid = (sender as EmbeddedDynamicEditorForm)?.Editor!;
|
|
|
+ var edit = grid.FindEditor(nameof(DFLayoutFieldProperties.ReadOnlyProperty));
|
|
|
+ if (edit is not null)
|
|
|
+ {
|
|
|
+ edit.IsEnabled = !properties.Property.IsNullOrWhiteSpace() && !grid.ReadOnly && edit.EditorDefinition.Editable.IsEditable();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
}
|