using System; using System.Collections.Generic; using System.Windows.Media; using System.Windows; using Caliburn.Micro.Core; using DocumentFormat.OpenXml.Drawing; using ExtendedGrid.Microsoft.Windows.Controls; using MECF.Framework.Common.Account; using MECF.Framework.Common.Account.Permissions; using Sicentury.Core; namespace MECF.Framework.UI.Client.RecipeEditorLib.RecipeModel.Params { public abstract class Param : BindableBase, IParam { #region Variables protected string _name; protected string _displayName; protected string _unitName; protected MenuPermissionEnum _perm; protected MenuPermissionEnum _permStep; protected MenuPermissionEnum _permColumn; protected bool _isEnabled; protected bool _isHideValue; protected string _hiddenValueMasking; protected bool _isSaved; protected bool _isColumnSelected; protected Visibility _visibility; protected bool _isValid; protected string _validationError; protected bool _isEqualsToPrevious; protected Color _background; protected bool _isHighlighted; #endregion #region Constructors protected Param() { _isSaved = true; _isEnabled = true; _isValid = true; _validationError = null; _isEqualsToPrevious = true; _visibility = Visibility.Visible; _isHighlighted = false; _hiddenValueMasking = "-"; } #endregion #region Properties /// /// 设置或返回当前参数所在的列的访问权限变更时,执行的回调函数。 /// public Action ColumnPermChangedCallback { get; set; } public Func Check { get; set; } /// public RecipeStep Parent { get; set; } /// public DataGridRow RowOwner { get; set; } /// public DataGridColumn ColumnOwner { get; set; } /// public virtual IParam Previous { get; set; } /// public virtual IParam Next { get; set; } /// public string Name { get => _name; set => Set(ref _name, value); } /// public string DisplayName { get => _displayName; set => Set(ref _displayName, value); } /// /// 设置或返回当前参数的单位。 /// public string UnitName { get => _unitName; set => Set(ref _unitName, value); } /// public MenuPermissionEnum StepPermission { get => _permStep; set => Set(ref _permStep, value); } /// public MenuPermissionEnum ColumnPermission { get => _permColumn; set => Set(ref _permColumn, value); } /// public virtual MenuPermissionEnum Permission => (MenuPermissionEnum)Math.Min((int)StepPermission, (int)ColumnPermission); /// public bool IsHideValue { get => _isHideValue; set => Set(ref _isHideValue, value); } /// public string HiddenValueMasking { get => _hiddenValueMasking; set => Set(ref _hiddenValueMasking, value); } /// public bool IsEnabled { get => _isEnabled; set => Set(ref _isEnabled, value); } /// public virtual bool IsSaved { get => _isSaved; set => Set(ref _isSaved, value); } /// public bool IsEqualsToPrevious { get => _isEqualsToPrevious; set => Set(ref _isEqualsToPrevious, value); } /// public bool IsValid { get => _isValid; internal set => Set(ref _isValid, value); } /// public string ValidationError { get => _validationError; protected set => Set(ref _validationError, value); } public Color Background { get => _background; private set { _background = value; NotifyOfPropertyChange(); } } /// public bool IsHighlighted { get => _isHighlighted; private set => Set(ref _isHighlighted, value); } public bool IsColumnSelected { get => _isColumnSelected; set => Set(ref _isColumnSelected, value); } public Visibility Visible { get => _visibility; set => Set(ref _visibility, value); } public bool EnableConfig { get; set; } public bool EnableTolerance { get; set; } public Visibility StepCheckVisibility { get; set; } #region Methods public void SetBackground(Color brush) { Background = brush; } /// /// 高亮显示当前参数。 /// public void Highlight() { IsHighlighted = true; } /// /// 取消高亮显示。 /// public void ResetHighlight() { IsHighlighted = false; } /// /// 将当前参数所对应的前序、后续参数链表转换为数组。 /// /// public virtual List Flatten() { if (Previous != null) return Previous.Flatten(); var list = new List(); IParam p = this; while (p != null) { list.Add(p); p = p.Next; } return list; } /// /// 校验当前参数的数值。 /// /// public virtual void Validate() { IsValid = true; ValidationError = ""; } /// /// 将当前参数标记为已保存状态。 /// public virtual void Save() { IsSaved = true; } public override string ToString() { return $"{DisplayName}, ControlName={Name}"; } #endregion #endregion } }