public override void NeedUpdateCreatedMembers()
        {
            base.NeedUpdateCreatedMembers();

            createdProperty     = null;
            createdChangedEvent = null;
        }
Example #2
0
        protected override void CreateMembers(List <Metadata.Member> created)
        {
            var _event = CreateEvent();

            if (_event != null)
            {
                createdEvent = _event;
                created.Add(_event);
            }
        }
Example #3
0
        void Unsubscribe()
        {
            if (subscribedEvent != null)
            {
                try
                {
                    subscribedEvent.RemoveEventHandler(subscribedTarget, subscribedHandler);
                }
                catch (Exception e)
                {
                    Log.Warning(e.Message);
                }

                subscribedEvent   = null;
                subscribedTarget  = null;
                subscribedHandler = null;
            }

            properties.Clear();
            propertyBySignature.Clear();
            propertyMethodParameters = null;
        }
Example #4
0
        //

        public HCItemEvent(HierarchicalContainer owner, HierarchicalContainer.Item parent, object[] controlledObjects, Metadata.Event _event)
            : base(owner, parent, controlledObjects)
        {
            this._event = _event;
        }
Example #5
0
        void Subscribe()
        {
            Unsubscribe();

            var eventValue = Event.Value;

            if (eventValue != null)
            {
                var _event = eventValue.Member as Metadata.Event;
                if (_event != null)
                {
                    //HandlerMethod
                    var methodValue = HandlerMethod.Value;
                    if (methodValue != null)
                    {
                        var method = methodValue.Member as Metadata.Method;
                        if (method != null)
                        {
                            try
                            {
                                var handler = Metadata.Delegate.Create(_event.EventHandlerType, method.Static ? null : methodValue.Object, method);

                                object target = null;
                                if (!_event.Static)
                                {
                                    target = Sender.Value;
                                    if (target == null)
                                    {
                                        target = eventValue.Object;
                                    }
                                }

                                _event.AddEventHandler(target, handler);

                                subscribedEvent   = _event;
                                subscribedTarget  = target;
                                subscribedHandler = handler.NetDelegate;
                            }
                            catch (Exception e)
                            {
                                Log.Warning(e.Message);
                            }
                        }
                    }

                    //HandlerFlow
                    var flowValue = HandlerFlow.Value;
                    if (flowValue != null)
                    {
                        try
                        {
                            //!!!!need support virtual types (far future)

                            var parameters = _event.EventHandlerType.GetNetType().GetMethod("Invoke").GetParameters();

                            Delegate handler;

                            if (CanUseSimpleHandlerMethodMode(parameters))
                            {
                                //simple mode. use SimpleHandler methods.

                                var methodName = "SimpleHandler" + parameters.Length.ToString();
                                var method     = GetType().GetMethod(methodName, BindingFlags.Instance | BindingFlags.NonPublic);
                                handler = Delegate.CreateDelegate(_event.EventHandlerType.GetNetType(), this, method);
                                //var handler = Metadata.Delegate.Create( _event.EventHandlerType, method.Static ? null : this, method );
                            }
                            else
                            {
                                // dynamic method mode. ref, out, value types supported.
                                //TODO: check performance. cache ?
                                handler = BuildDynamicHandler(_event.EventHandlerType.GetNetType(), Handler);
                            }


                            object target = null;
                            if (!_event.Static)
                            {
                                target = Sender.Value;
                                if (target == null)
                                {
                                    target = eventValue.Object;
                                }
                            }

                            _event.AddEventHandler(target, handler);

                            subscribedEvent   = _event;
                            subscribedTarget  = target;
                            subscribedHandler = handler;



                            //parameters
                            propertyMethodParameters = new List <PropertyImpl>();
                            int invokeParameterIndexCounter = 0;
                            for (int nParameter = 0; nParameter < parameters.Length; nParameter++)
                            //for( int nParameter = 0; nParameter < method.Parameters.Length; nParameter++ )
                            {
                                var parameter = parameters[nParameter];                                  //var parameter = method.Parameters[ nParameter ];

                                if (!parameter.IsOut && !parameter.IsRetval)                             //if( !parameter.Output && !parameter.ReturnValue )
                                {
                                    //!!!!имя еще как-то фиксить?
                                    //string name = null;
                                    //if( name == null )
                                    var name = parameter.Name.Substring(0, 1).ToUpper() + parameter.Name.Substring(1);
                                    //name = parameter.Name;

                                    string namePrefix  = "__parameter_";
                                    string displayName = TypeUtility.DisplayNameAddSpaces(name);

                                    var parameterType = MetadataManager.GetTypeOfNetType(parameter.ParameterType);
                                    var p             = new PropertyImpl(this, namePrefix + name, false, parameterType, parameterType, new Metadata.Parameter[0], true, this, "Parameters", displayName, invokeParameterIndexCounter);
                                    //var p = new PropertyImpl( this, namePrefix + name, false, parameter.Type, parameter.Type, new Metadata.Parameter[ 0 ], true, this, "Parameters", displayName, invokeParameterIndexCounter );
                                    p.Description = "";
                                    //p.Serializable = true;

                                    properties.Add(p);
                                    propertyBySignature[p.Signature] = p;
                                    propertyMethodParameters.Add(p);
                                }

                                //!!!!может индекс юзать?
                                if (!parameter.IsRetval)                                 //if( !parameter.ReturnValue )
                                {
                                    invokeParameterIndexCounter++;
                                }
                            }
                        }
                        catch (Exception e)
                        {
                            Log.Warning(e.Message);
                        }
                    }
                }
            }
        }
Example #6
0
        public override void NeedUpdateCreatedMembers()
        {
            base.NeedUpdateCreatedMembers();

            createdEvent = null;
        }
Example #7
0
 public ReferenceValueType_Event(Metadata.Event member, object obj)
     : base(member, obj)
 {
 }