コード例 #1
0
        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[] { });
            }
        }
コード例 #2
0
 public PackageElementTypeAttribute(ePackageElementType elementType)
 {
     ElementType = elementType;
 }
コード例 #3
0
        /// <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));
        }
コード例 #4
0
 public PackageElement(string name, ePackageElementType elementType)
 {
     Name        = name;
     ElementType = elementType;
 }