Esempio n. 1
0
        /// <summary>
        /// Func<object, type> 型の CbFunc<type> 型の変数を返します。
        /// </summary>
        /// <param name="type">オリジナルの元々の型</param>
        /// <param name="retType">オリジナルの返し値の型</param>
        /// <param name="name">変数名</param>
        /// <returns>CbFunc<type> 型の変数</returns>
        public static ICbValue FuncValue(Type type, Type retType, string name)
        {
            if (type is null)
            {
                return(null);
            }
            string typeName = type.FullName;

            if (type.IsByRef)
            {
                // リファレンス(スクリプト変数接続)

                typeName = typeName.Replace("&", "");
                type     = CbST.GetTypeEx(typeName);
            }

            foreach (var arg in type.GenericTypeArguments)
            {
                Type cbType = CbST.ConvertCbType(arg);
                if (cbType is null)
                {
                    return(null);
                }
            }

            return(CbFunc.CreateFuncFromOriginalType(type, retType, name));
        }
Esempio n. 2
0
 /// <summary>
 /// CbXXX型の Func<> 型を作成します。
 /// </summary>
 /// <param name="original">Func型の正式な型</param>
 /// <param name="ret">オリジナルの返し値の型</param>
 /// <returns>型</returns>
 public static Type GetFuncType(Type original, Type ret)
 {
     return(typeof(CbFunc <,>).MakeGenericType(
                original,
                CbST.ConvertCbType(ret)
                ));
 }
Esempio n. 3
0
        /// <summary>
        /// CbXXX型の Func<> 型の変数を作成します。
        /// </summary>
        /// <param name="arg">Func型の第一引数のオリジナルの型</param>
        /// <param name="ret">オリジナルの返し値の型</param>
        /// <returns>CbFunc<original, CbXXX型のret型>の変数</returns>
        public static ICbValue CreateFunc(Type arg, Type ret, string name = "")
        {
            Type cbFuncType = typeof(CbFunc <,>).MakeGenericType(
                typeof(Func <,>).MakeGenericType(arg, ret),
                CbST.ConvertCbType(ret)
                );

            object result = cbFuncType.InvokeMember(
                nameof(CbFunc <int, CbInt> .GetCbFunc),
                BindingFlags.InvokeMethod,
                null, null, new object[] { name }) as ICbValue;

            return(result as ICbValue);
        }
Esempio n. 4
0
            public _AssetXML()
            {
                ReadAction = (self) =>
                {
                    if (DataVersion != DATA_VERSION)
                    {
                        ControlTools.ShowErrorMessage(CapyCSS.Language.Instance["Help:DataVersionError"]);
                        return;
                    }

                    self.attachVariableIds = RootFunc.AttachVariableIds;

                    if (RootFunc.AttachFileName != null)
                    {
                        self.AttachParam = new AttachText(RootFunc.AttachFileName);
                    }
                    if (RootFunc.AttachVariableId != 0)
                    {
                        self.AttachParam = new AttachVariableId(RootFunc.AttachVariableId);
                    }

                    if (RootFunc.AssetValueType != null)
                    {
                        Type type = CbST.GetTypeEx(RootFunc.AssetValueType);
                        self.SelectedVariableType[0]     = type;
                        self.SelectedVariableTypeName[0] = RootFunc.AssetValueType;
                    }
                    else
                    {
                        self.SelectedVariableTypes = RootFunc.AssetValueTypes.ToArray();
                    }

                    self.IsReBuildMode = true;
                    self.AssetFuncType = RootFunc.AssetFuncType;
                    self.AssetType     = RootFunc.AssetType;

                    self.LinkConnectorControl.AssetXML = RootFunc.RootConnector;
                    self.LinkConnectorControl.AssetXML.ReadAction?.Invoke(self.LinkConnectorControl);

                    // 次回の為の初期化
                    self.AssetXML = new _AssetXML <MultiRootConnector>(self);
                };
            }
Esempio n. 5
0
        /// <summary>
        /// 指定されたアセットコードに対してウインドウを表示して変数の型を選択しノードを作成します。
        /// </summary>
        /// <param name="assetCode">アセットコード</param>
        /// <param name="multiRootConnector">対象のMultiRootConnector</param>
        /// <param name="stackNode">変数の登録領域</param>
        /// <param name="forcedListTypeSelect">リスト型を選択するか?</param>
        /// <returns>ノード</returns>
        private static MultiRootConnector _CreateFreeTypeVariableFunction(
            CommandCanvas OwnerCommandCanvas,
            string assetCode,
            List <TypeRequest> typeRequests,
            MultiRootConnector multiRootConnector,
            StackNode stackNode,
            bool forcedListTypeSelect)
        {
            if (multiRootConnector is null)
            {
                List <string> typeNames;
                if (typeRequests == null)
                {
                    if (OwnerCommandCanvas.ScriptWorkStack.StackData.Count != 0)
                    {
                        // 既存の変数から選択する

                        stackNode = ListSelectWindow.Create(
                            OwnerCommandCanvas,
                            "Variable",
                            OwnerCommandCanvas.ScriptWorkStack.StackData,
                            forcedListTypeSelect,
                            new Point(Mouse.GetPosition(null).X, Mouse.GetPosition(null).Y));

                        if (stackNode is null)
                        {
                            return(null);
                        }

                        typeNames = new List <string>();
                        typeNames.Add(stackNode.ValueData.OriginalType.FullName);
                    }
                    else
                    {
                        // 既存の変数が存在しない

                        return(null);
                    }
                }
                else
                {
                    // 変数を新規作成する

                    typeNames = OwnerCommandCanvas.RequestTypeName(typeRequests);

                    if (typeNames is null)
                    {
                        return(null);
                    }

                    int    nameIndex = 1;
                    string name;
                    do
                    {
                        name = "variable" + nameIndex++;
                    }while (OwnerCommandCanvas.ScriptWorkStack.NameContains(name));

                    ListSelectWindow.DefaultValue = CbST.CbCreate(CbST.GetTypeEx(typeNames[0]), name);
                    stackNode = OwnerCommandCanvas.ScriptWorkStack.Append(ListSelectWindow.DefaultValue).stackNode;
                    ListSelectWindow.DefaultValue = null;
                }

                multiRootConnector = new MultiRootConnector(nameof(CbScript));
                multiRootConnector.OwnerCommandCanvas    = OwnerCommandCanvas;
                multiRootConnector.SelectedVariableTypes = typeNames.ToArray();

                multiRootConnector.AssetFuncType = assetCode;
            }

            multiRootConnector.AttachParam = new MultiRootConnector.AttachVariableId(stackNode.Id);
            multiRootConnector.AssetType   = FunctionType.FuncType;

            return(multiRootConnector);
        }