public void InsertVariable(AbstractComponentData receivedData) { string variable = receivedData.id; bool shouldReceive = true; if (receivedData is AbstractParameterData) { shouldReceive = CheckParameterData(receivedData as AbstractParameterData); } if (shouldReceive) { InlineUIContainer container = CreateInlineContainer(variable, this.CaretPosition); this.CaretPosition = container.ContentEnd; if (receivedData is AbstractParameterData) { referredMacroParams.Add(variable); } DependenceCommandArgs args = new DependenceCommandArgs() { source = this, targetVariableId = variable }; Command.AddDependence.Execute(args, this); container.Unloaded += macroParameterContainer_Unloaded; } else { Console.Out.WriteLine("Cannot receive macro parameter " + variable + ", expression already contains parameter from macro " + referredMacroId()); } }
void macroParameterContainer_Unloaded(object sender, RoutedEventArgs e) { InlineUIContainer container = sender as InlineUIContainer; string variableId = (container.Tag as string); referredMacroParams.Remove(variableId); DependenceCommandArgs args = new DependenceCommandArgs() { source = this, targetVariableId = variableId }; Command.RemoveDependence.Execute(args, this); }