public SplitterCellButton[] GetButtons(eSplitterObjectType splitterObject, ePackageElementType elementType) { switch (elementType) { case ePackageElementType.Procedure: case ePackageElementType.Function: return(GetButtonsForMethod(splitterObject)); case ePackageElementType.Type: case ePackageElementType.Cursor: case ePackageElementType.Variable: return(GetButtonsForVariables(splitterObject)); default: return(new SplitterCellButton[] { }); } }
public PackageElementTypeAttribute(ePackageElementType elementType) { ElementType = elementType; }
/// <summary> /// Получить имена элементов в зависимости от объекта, типа эемента и состояния элемента /// </summary> /// <param name="splitterObjectType">Тип объекта</param> /// <param name="elementStates">Состояние элемента (можно несколько)</param> /// <param name="packageElementType">Тип элемента (можно несколько)</param> /// <returns></returns> private IEnumerable <string> GetNames(eSplitterObjectType splitterObjectType, eElementStateType elementStates, ePackageElementType packageElementType = ePackageElementType.Procedure | ePackageElementType.Function) { var x = Expr.Expression.Parameter(typeof(SplitterElement), "x"); var HasFlagMethod = typeof(Enum).GetMethod("HasFlag", new[] { typeof(Enum) }); var xPackageElementType = Expr.Expression.Convert(Expr.Expression.PropertyOrField(x, "PackageElementType"), typeof(Enum)); var xPackageElementTypeHasFlagExpression = Expr.Expression.Call(Expr.Expression.Constant(packageElementType, typeof(Enum)), HasFlagMethod, xPackageElementType); var xObjectType = Expr.Expression.Convert(Expr.Expression.PropertyOrField(x, splitterObjectType.ToString()), typeof(Enum)); var xObjectTypeHasFlagExpression = Expr.Expression.Call(Expr.Expression.Constant(elementStates, typeof(Enum)), HasFlagMethod, xObjectType); var FinalExpression = Expr.Expression.AndAlso(xPackageElementTypeHasFlagExpression, xObjectTypeHasFlagExpression); var Filter = (Func <SplitterElement, bool>)Expr.Expression.Lambda(FinalExpression, x).Compile(); Seri.Log.Verbose($"GetName Filter: {FinalExpression}"); /* Пример результата отбора * _splitter.Elements.Where(x => packageElementType.HasFlag(x.PackageElementType) && elementStates.HasFlag(x.NewSpec)); * где вместо x.NewSpec подставится поле в зависимости от splitterObjectType */ return(_splitter.Elements.Where(Filter).Select(x => x.PackageElementName)); }
public PackageElement(string name, ePackageElementType elementType) { Name = name; ElementType = elementType; }