/// <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));
        }
Пример #3
0
        /// <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);
            }
        }
Пример #4
0
        /// <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;
            }
        }
Пример #5
0
 /// <summary>
 /// Inject edits from outside into context
 /// </summary>
 /// <param name="edits">Injected edits</param>
 public void InjectEdits(EditsProvider edits)
 {
     Edits = edits;
 }