コード例 #1
0
        public static void AddMethodHandlersClass(DefClass type, IndentStringBuilder sb)
        {
            if (!type.HasWrapType(WrapTypes.NativeDirector))
            {
                throw new Exception("Unexpected");
            }

            if (type.IsNested)
            {
                sb.AppendIndent("public: ");
            }
            else
            {
                sb.AppendIndent("public ");
            }

            sb.Append("ref class " + type.Name + " abstract sealed\n");
            sb.AppendLine("{");
            sb.AppendLine("public:");
            sb.IncreaseIndent();

            foreach (DefFunction f in type.PublicMethods)
            {
                if (f.IsDeclarableFunction && f.IsVirtual)
                {
                    //if (f.Parameters.Count > 0)
                    //{
                    //    AddEventArgsClass(f, sb);
                    //}

                    sb.AppendIndent("delegate static " + f.CLRTypeName + " " + f.CLRName + "Handler(");
                    for (int i = 0; i < f.Parameters.Count; i++)
                    {
                        DefParam param = f.Parameters[i];
                        sb.Append(" " + param.Type.GetCLRParamTypeName(param) + " " + param.Name);
                        if (i < f.Parameters.Count - 1)
                        {
                            sb.Append(",");
                        }
                    }
                    sb.Append(" );\n");
                }
            }

            sb.DecreaseIndent();
            sb.AppendLine("};");
            sb.AppendLine();
        }
コード例 #2
0
        // CodeMapping Function
        public string WindowConstructor(int depth = 0)
        {
            var indentBuilder = new IndentStringBuilder(depth);

            if (Parameter.Option.TargetPlatform == Platform.Android)
            {
                indentBuilder.Append("this.SetAndroidStyle();");
            }

            return(indentBuilder.ToString());
        }
コード例 #3
0
 protected virtual void AddBody()
 {
     AddPreNestedTypes();
     _sb.AppendLine("//Nested Types");
     AddAllNestedTypes();
     AddPostNestedTypes();
     _sb.AppendLine("//Private Declarations");
     AddPrivateDeclarations();
     _sb.Append("\n");
     _sb.AppendLine("//Internal Declarations");
     AddInternalDeclarations();
     _sb.Append("\n");
     _sb.AppendLine("//Public Declarations");
     AddPublicDeclarations();
     _sb.Append("\n");
     _sb.AppendLine("//Protected Declarations");
     AddProtectedDeclarations();
     _sb.Append("\n");
 }
コード例 #4
0
        private string GenerateCallback(PTrigger trigger)
        {
            var callbackBuilder = new IndentStringBuilder();

            string declareName = trigger.EventInfo.DeclaringType.GetAttribute <WPFAttribute>().Name;

            ParameterInfo[] infos = trigger.EventInfo.GetParameters();

            callbackBuilder.Append($"private async void {CallbackContainer[trigger]}(");

            for (int i = 0; i < infos.Length; i++)
            {
                string paramName = infos[i].Name;

                if (paramName == "sender")
                {
                    paramName = "oSender";
                }

                callbackBuilder.Append(infos[i].ParameterType.Name);
                callbackBuilder.Append(" ");
                callbackBuilder.Append(paramName);

                if (i < infos.Length - 1)
                {
                    callbackBuilder.Append(", ");
                }
            }

            callbackBuilder.AppendLine(")");

            // Ex: private void Button_Click(object oSender, EventArgs)

            callbackBuilder.AppendLine("{");
            //callbackBuilder.AppendLine("try", 1);
            //callbackBuilder.AppendLine("{", 1);

            callbackBuilder.AppendLine($"var sender = oSender as {declareName};", 1);
            callbackBuilder.AppendLine();
            callbackBuilder.AppendLine("{Code}");

            //callbackBuilder.AppendLine("}", 1);
            //callbackBuilder.AppendLine("catch (Exception ex)", 1);
            //callbackBuilder.AppendLine("{", 1);
            //callbackBuilder.AppendLine("MessageBox.Show(ex.ToString());", 1);
            //callbackBuilder.AppendLine("}", 1);
            callbackBuilder.Append("}");

            /*
             * Ex: private void Button_Click(object oSender, EventArgs)
             *  {
             *      var sender = oSender as {SenderType};
             *  {Code:1}
             *  }
             */

            return(callbackBuilder.ToString());
        }
コード例 #5
0
        // CodeMapping Function
        public string GlobalVariableDefine()
        {
            var indentBuilder = new IndentStringBuilder(2);

            for (int i = 0; i < this.Mapper.NameContainer.Count; i++)
            {
                var kv   = this.Mapper.NameContainer.ElementAt(i);
                var attr = kv.Value.GetAttribute <WPFAttribute>();

                indentBuilder.Append($"private {attr.Name} {kv.Key.Trim('_')};");

                if (i < this.Mapper.NameContainer.Count - 1)
                {
                    indentBuilder.AppendLine();
                }
            }

            return(indentBuilder.ToString());
        }
コード例 #6
0
        // CodeMapping Function
        public string PageInitialize()
        {
            var indentBuilder = new IndentStringBuilder(3);

            for (int i = 0; i < this.Parameter.Screens.Length; i++)
            {
                /* Ex
                 * var p0 = GenResourceManager.LoadXaml("Screen1") as DeXignPage;
                 * dw.Add(p0);
                 */

                indentBuilder.AppendLine($"var p{i} = GenResourceManager.LoadXaml(\"{this.Parameter.Screens[i].GetPageName()}.xaml\") as DeXignPage;");
                indentBuilder.AppendLine($"dw.Add(p{i});");
            }

            /* Ex
             * dw.SetPage(p0);
             */
            indentBuilder.Append($"dw.SetPage(p0);");

            return(indentBuilder.ToString());
        }
コード例 #7
0
        public static void AddNativeProxyMethodBody(DefFunction f, string managedTarget, IndentStringBuilder sb)
        {
            string managedCall;
            string fullPostConv = null;

            if (f.IsGetProperty)
            {
                sb.AppendLine(f.CLRTypeName + " mp_return = " + managedTarget + "->" + f.CLRName + ";");
                managedCall = "mp_return";
            }
            else if (f.IsSetProperty)
            {
                DefParam param = f.Parameters[0];
                managedCall = managedTarget + "->" + f.CLRName + " = " + param.Type.GetNativeCallConversion(param.Name, param);
            }
            else
            {
                string pre, post, conv;

                foreach (DefParam param in f.Parameters)
                {
                    param.Type.GetNativeParamConversion(param, out pre, out conv, out post);
                    if (!String.IsNullOrEmpty(pre))
                    {
                        sb.AppendLine(pre);
                    }

                    if (!String.IsNullOrEmpty(post))
                    {
                        fullPostConv += post + "\n";
                    }
                }

                bool explicitCast = f.HasAttribute <ExplicitCastingForParamsAttribute>();

                if (!f.IsVoid)
                {
                    sb.AppendIndent(f.CLRTypeName + " mp_return = " + managedTarget + "->" + f.CLRName + "(");
                    for (int i = 0; i < f.Parameters.Count; i++)
                    {
                        DefParam param = f.Parameters[i];
                        param.Type.GetNativeParamConversion(param, out pre, out conv, out post);
                        sb.Append(" ");
                        if (explicitCast)
                        {
                            sb.Append("(" + param.CLRTypeName + ")");
                        }
                        sb.Append(conv);
                        if (i < f.Parameters.Count - 1)
                        {
                            sb.Append(",");
                        }
                    }
                    sb.Append(" );\n");
                    managedCall = "mp_return";

                    if (!String.IsNullOrEmpty(fullPostConv))
                    {
                        sb.AppendLine(fullPostConv);
                    }
                }
                else
                {
                    managedCall = managedTarget + "->" + f.CLRName + "(";
                    for (int i = 0; i < f.Parameters.Count; i++)
                    {
                        DefParam param = f.Parameters[i];
                        param.Type.GetNativeParamConversion(param, out pre, out conv, out post);
                        managedCall += " ";
                        if (explicitCast)
                        {
                            managedCall += "(" + param.CLRTypeName + ")";
                        }
                        managedCall += conv;
                        if (i < f.Parameters.Count - 1)
                        {
                            managedCall += ",";
                        }
                    }
                    managedCall += " )";
                }
            }

            if (!f.IsVoid)
            {
                if (f.Type is IDefString)
                {
                    sb.AppendLine("SET_NATIVE_STRING( Mogre::Implementation::cachedReturnString, " + managedCall + " )");
                    sb.AppendLine("return Mogre::Implementation::cachedReturnString;");
                }
                else
                {
                    string   returnExpr;
                    string   newname, expr, postcall;
                    DefParam param = new DefParam(f, managedCall);
                    expr     = f.Type.GetPreCallParamConversion(param, out newname);
                    postcall = f.Type.GetPostCallParamConversionCleanup(param);
                    if (!String.IsNullOrEmpty(expr))
                    {
                        sb.AppendLine(expr);
                        if (String.IsNullOrEmpty(postcall))
                        {
                            returnExpr = newname;
                        }
                        else
                        {
                            throw new Exception("Unexpected");
                        }
                    }
                    else
                    {
                        returnExpr = newname;
                    }

                    if (IsCachedFunction(f))
                    {
                        sb.AppendLine("STATIC_ASSERT( sizeof(" + f.Type.FullNativeName + ") <= CACHED_RETURN_SIZE )");
                        sb.AppendLine("memcpy( Mogre::Implementation::cachedReturn, &" + returnExpr + ", sizeof(" + f.Type.FullNativeName + ") );");
                        sb.AppendLine("return *reinterpret_cast<" + f.Type.FullNativeName + "*>(Mogre::Implementation::cachedReturn);");
                    }
                    else
                    {
                        sb.AppendLine("return " + returnExpr + ";");
                    }
                }
            }
            else
            {
                sb.AppendLine(managedCall + ";");

                if (!String.IsNullOrEmpty(fullPostConv))
                {
                    sb.AppendLine(fullPostConv);
                }
            }
        }
コード例 #8
0
 public void CanAppendText()
 {
     TestObject.Append(TestString);
 }