예제 #1
0
        async Task IDependencyTargetExportChanged.OnExportsChangedAsync(Envoy envoy, ExportsChangedData data)
        {
            NIType type = await envoy.GetTypeDiagramSignatureAsync();

            if (ShouldUpdateDataTypeFromChange(data))
            {
                UpdateStructType(type);
            }
        }
예제 #2
0
 /// <inheritdoc />
 public Task OnExportsChangedAsync(Envoy envoy, ExportsChangedData data)
 {
     // This is called when something about the "exported" attributes of the item we are linked to changes.
     if (!(Rooted && envoy.Rooted))
     {
         return(AsyncHelpers.CompletedTask);
     }
     this.TransactUpdateFromDependency(envoy, data, "Update From Dependency", () =>
     {
         if (!(Rooted && envoy.Rooted))
         {
             return;
         }
         IMethodCallTarget target = envoy?.QueryService <IMethodCallTarget>().FirstOrDefault();
         if (target != null)
         {
             var name             = target.Name;
             var icon             = target.GetIcon(ViewElementTemplate.Icon);
             bool envoyChanged    = data.Reason == ExportsChangeReason.Resolve || data.Reason == ExportsChangeReason.Unresolve;
             bool propertyChanged = data.Reason == ExportsChangeReason.PropertyChange;
             if (envoyChanged || (propertyChanged && data.ChangedProperties.Any(n => n == "Icon")))
             {
                 // Notify that the icon changed
                 TransactionRecruiter.EnlistPropertyChanged(this, "Icon");
             }
             if (envoyChanged || (propertyChanged && data.ChangedProperties.Any(n => n == "CacheSignature")))
             {
                 TransactionRecruiter.EnlistPropertyChanged(this, "Signature");
                 // You can look at the signature to gather connector pane information
                 var signature     = target.Signature;
                 var allParameters = signature.GetParameters();
                 foreach (var parameter in allParameters)
                 {
                     var terminalName = parameter.GetAttributeValue("NI.UserDefinedName").Value ?? "Unknown";
                     var index        = parameter.GetName();
                     var usage        = parameter.GetParameterTerminalUsage();
                     var input        = parameter.GetInputParameterPassingRule() != NIParameterPassingRule.NotAllowed;
                     var output       = parameter.GetOutputParameterPassingRule() != NIParameterPassingRule.NotAllowed;
                     Log.WriteLine($"Parameter: {terminalName}, Type: {parameter.GetDataType()}");
                 }
             }
         }
     });
     return(AsyncHelpers.CompletedTask);
 }
예제 #3
0
        public async Task OnExportsChangedAsync(Envoy envoy, ExportsChangedData data)
        {
            if (ShouldUpdateDataTypeFromChange(data))
            {
                NIType oldType = Type;
                NIType type    = await envoy.GetTypeDiagramSignatureAsync();

                if (type.IsUnset() || type == oldType)
                {
                    return;
                }
                this.TransactUpdateFromDependency(envoy, data, TransactionManager, "Set variant type", () =>
                {
                    Type = type;
                    TransactionRecruiter.EnlistPropertyItem(this, nameof(Type), oldType, type, (t, __) => { Type = t; }, TransactionHints.Semantic);
                    UpdateCasesFromDataType(type);
                });
            }
        }
예제 #4
0
        public async Task OnExportsChangedAsync(Envoy envoy, ExportsChangedData data)
        {
            if (ShouldUpdateDataTypeFromChange(data))
            {
                NIType oldType = Type;
                NIType type    = await envoy.GetTypeDiagramSignatureAsync();

                if (type.IsUnset() || type == oldType)
                {
                    return;
                }
                using (var transaction = TransactionManager.BeginTransactionIfNecessary("Set type", TransactionPurpose.NonUser))
                {
                    Type = type;
                    TransactionRecruiter.EnlistPropertyItem(this, nameof(Type), oldType, type, (t, __) => { Type = t; }, TransactionHints.Semantic);
                    UpdateTerminalsFromDataType(type);
                    transaction?.Commit();
                }
            }
        }
예제 #5
0
 private static bool ShouldUpdateDataTypeFromChange(ExportsChangedData data)
 {
     return(data.IsForResolve ||
            (data.IsForPropertyChange && data.HasChangedProperty(TypeDiagramCache.DataTypePropertyName)));
 }
예제 #6
0
 /// <inheritdoc/>
 Task IDependencyTargetExportChanged.OnExportsChangedAsync(Envoy envoy, ExportsChangedData data)
 {
     return(AsyncHelpers.CompletedTask);
 }
예제 #7
0
 public Task OnExportsChangedAsync(Envoy envoy, ExportsChangedData data)
 {
     // TODO
     return(AsyncHelpers.CompletedTask);
 }