public override void NeedUpdateCreatedMembers() { base.NeedUpdateCreatedMembers(); createdProperty = null; createdChangedEvent = null; }
protected override void CreateMembers(List <Metadata.Member> created) { var _event = CreateEvent(); if (_event != null) { createdEvent = _event; created.Add(_event); } }
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; }
// public HCItemEvent(HierarchicalContainer owner, HierarchicalContainer.Item parent, object[] controlledObjects, Metadata.Event _event) : base(owner, parent, controlledObjects) { this._event = _event; }
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); } } } } }
public override void NeedUpdateCreatedMembers() { base.NeedUpdateCreatedMembers(); createdEvent = null; }
public ReferenceValueType_Event(Metadata.Event member, object obj) : base(member, obj) { }