GtkSharp.Generation.Signal.GenGlueVirtualMethod C# (CSharp) Method

GenGlueVirtualMethod() private method

private GenGlueVirtualMethod ( GtkSharp.Generation.GenerationInfo gen_info ) : void
gen_info GtkSharp.Generation.GenerationInfo
return void
		private void GenGlueVirtualMethod (GenerationInfo gen_info)
		{
			StreamWriter glue = gen_info.GlueWriter;
			string glue_name = String.Format ("{0}sharp_{1}_base_{2}", container_type.NS.ToLower ().Replace (".", "_"), container_type.Name.ToLower (), ClassFieldName);
			glue.WriteLine ("{0} {1} ({2});\n", retval.CType, glue_name, GlueSignature);
			glue.WriteLine ("{0}\n{1} ({2})", retval.CType, glue_name, GlueSignature);
			glue.WriteLine ("{");
			glue.WriteLine ("\t{0}Class *klass = ({0}Class *) get_threshold_class (G_OBJECT ({1}));", container_type.CName, parms[0].Name);
			glue.Write ("\tif (klass->{0})\n\t\t", ClassFieldName);
			if (!IsVoid)
				glue.Write ("return ");
			glue.Write ("(* klass->{0}) (", ClassFieldName);
			for (int i = 0; i < parms.Count; i++)
				glue.Write (parms[i].Name + (i == parms.Count - 1 ? "" : ", "));
			glue.WriteLine (");");
			if (!IsVoid)
				glue.WriteLine ("\treturn " + DefaultGlueValue + ";");
			glue.WriteLine ("}");

			StreamWriter sw = gen_info.Writer;
			sw.WriteLine ("\t\t[DllImport (\"{0}\")]", gen_info.GluelibName);
			sw.WriteLine ("\t\tstatic extern {0} {1} ({2});\n", retval.MarshalType, glue_name, parms.ImportSignature);
			GenVMDeclaration (sw, null);
			sw.WriteLine ("\t\t{");
			MethodBody body = new MethodBody (parms);
			body.Initialize (gen_info, false, false, String.Empty);
			sw.WriteLine ("\t\t\t{0}{1} ({2});", IsVoid ? "" : retval.MarshalType + " __ret = ", glue_name, GlueCallString);
			body.Finish (sw, "");
			if (!IsVoid)
				sw.WriteLine ("\t\t\treturn {0};", retval.FromNative ("__ret"));
			sw.WriteLine ("\t\t}\n");
		}