Пример #1
0
        /// <summary>
        /// Registers scripting class
        /// </summary>
        public static bool RegisterClass <TType>(SciterView view)
        {
            Debug.Assert(view != null && view.HandleInternal != IntPtr.Zero, "View cannot be null");

            var result = false;
            var hvm    = SciterHostApi.SciterGetVM(view.HandleInternal);

            if (hvm != IntPtr.Zero)
            {
                var scripting = GetScriptingClasses(view, hvm);

                var sciterClassDef = GetClassDef(typeof(TType));
                if (!scripting.IsExists(sciterClassDef))
                {
                    var nativeClass = sciterClassDef.ToNative();
                    try
                    {
                        result = SciterHostApi.SciterNativeDefineClass(hvm, nativeClass);
                        scripting.ClassDefs.Add(sciterClassDef);
                    }
                    finally { SciterClassDef.FreeNative(nativeClass); }
                }
                else
                {
                    throw new ArgumentException("Class already registered", "TType");
                }
            }

            return(result);
        }
Пример #2
0
        /// <summary>
        /// Returns class definition by specified type
        /// </summary>
        private static SciterClassDef GetClassDef(Type type)
        {
            var scriptingClass = GetScriptingClass(type);
            var classDef       = new SciterClassDef()
            {
                name       = scriptingClass.Name,
                methods    = new List <SciterNativeMethodDef>(GetMethods(type, scriptingClass.IsStatic)).ToArray(),
                properties = new List <SciterNativePropertyDef>(GetProperties(type)).ToArray(),
                dtor       = ScriptingDtor
            };

            return(classDef);
        }
Пример #3
0
 /// <summary>
 /// Locates class definition by its name
 /// </summary>
 public bool IsExists(SciterClassDef classDef)
 {
     return(ClassDefs.FindIndex(c => c.name == classDef.name) >= 0);
 }