using System;
using System.Collections.Generic;
using System.Linq;
namespace InABox.Core
{
// When creating a new field with properties, make sure to override LoadProperties() and SaveProperties()
public abstract class DFLayoutFieldProperties : DFLayoutObject
{
[EditorSequence(-999)]
[CodeEditor(Editable = Editable.Enabled, ValidChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_0123456789")]
public string Code { get; set; }
[EditorSequence(-998)]
[TextBoxEditor]
public string Description { get; set; }
[EditorSequence(-997)]
[ComboLookupEditor(typeof(PropertyLookupGenerator))]
public string Property { get; set; }
[CheckBoxEditor]
[EditorSequence(4)]
public bool Required { get; set; }
[CheckBoxEditor]
[EditorSequence(5)]
public bool Secure { get; set; }
[CheckBoxEditor]
[EditorSequence(6)]
public bool Retain { get; set; }
[CheckBoxEditor]
[EditorSequence(7)]
public bool Hidden { get; set; }
[ExpressionEditor(null)]
[EditorSequence(8)]
public string Expression { get; set; }
///
/// An expression that sets the field to have a background colour of its result.
/// The result of the expression should be either a hex code like #rrggbb or #aarrggbb, or the string name of a ,
/// like 'Yellow'.
///
[ExpressionEditor(null, ToolTip = "Evalutes to either a hex code (#RRGGBB or #AARRGGBB) or a colour name (like 'Red' or 'Yellow'), which sets the background colour for this variable.")]
[EditorSequence(9)]
public string ColourExpression { get; set; }
public abstract object? ParseValue(object? value);
public abstract string FormatValue(object? value);
public virtual IEnumerable GetAdditionalColumns()
{
return Enumerable.Empty();
}
protected override void LoadProperties()
{
Description = GetProperty("Description", "");
Property = GetProperty("Property", "");
Required = GetProperty("Required", false);
Secure = GetProperty("Secure", false);
Retain = GetProperty("Retain", false);
Expression = GetProperty("Expression", "");
ColourExpression = GetProperty("ColourExpression", "");
}
protected override void SaveProperties()
{
SetProperty("Description", Description);
SetProperty("Property", Property);
SetProperty("Required", Required);
SetProperty("Secure", Secure);
SetProperty("Retain", Retain);
SetProperty("Expression", Expression);
SetProperty("ColourExpression", ColourExpression);
}
private class PropertyLookupGenerator : LookupGenerator