/// <summary> /// Accepts the component by appending to ComposeParts call. /// </summary> /// <param name="e">The edits provider used for accepting.</param> /// <param name="view">The view where instance will be accepted.</param> /// <returns>Variable with accepted instance and correct scope.</returns> private object acceptAppendComponent(EditsProvider e, ExecutionView view) { var toAccept = UserInteraction.DraggedInstance; var componentInfo = Services.GetComponentInfo(toAccept.Info); if (componentInfo == null) { view.Abort("Can accept only components"); return(null); } return(e.GetVariableFor(toAccept, view)); }
/// <summary> /// Accepts the part catalog in constructor. /// </summary> /// <param name="e">The edits provider used for accepting.</param> /// <param name="view">The view where instance will be accepted.</param> /// <returns>Variable with accepted catalog and correct scope.</returns> private object acceptPartCatalog(EditsProvider e, ExecutionView view) { var instance = UserInteraction.DraggedInstance; var isCatalog = Services.IsAssignable(TypeDescriptor.Create <ComposablePartCatalog>(), instance.Info); if (!isCatalog) { //allow accepting only components view.Abort("CompositionContainer can accept only single part catalog"); return(null); } return(e.GetVariableFor(instance, view)); }
/// <summary> /// Prepare instruction to be processed /// </summary> /// <param name="instruction">Prepared instruction</param> internal void Prepare(InstructionBase instruction) { var call = instruction as Call; if (call == null) { //only calls will have edits provider if (!(instruction is DirectInvoke)) { //Direct invoke shares edits provider (because we want to get edits on call place) Edits = null; } } else { Edits = new EditsProvider(call.TransformProvider, CurrentCall.CurrentBlock); } }
/// <summary> /// Runs given action in specified context. /// </summary> /// <param name="contextInstance">The context instance.</param> /// <param name="runnedAction">The runned action.</param> /// <param name="editContext">The edit context.</param> public void RunInContextOf(Instance contextInstance, Action runnedAction, EditsProvider editContext = null) { var editsSwp = Edits; var thisSwp = This; Edits = editContext; This = contextInstance; try { runnedAction(); } finally { Edits = editsSwp; This = thisSwp; } }
/// <summary> /// Inject edits from outside into context /// </summary> /// <param name="edits">Injected edits</param> public void InjectEdits(EditsProvider edits) { Edits = edits; }