void OnCopyCommandExecute(object sender, ExecutedRoutedEventArgs e) { this.Context.Services.GetService <DesignerPerfEventProvider>().WorkflowDesignerCopyStart(); CutCopyPasteHelper.DoCopy(this.Context); e.Handled = true; this.Context.Services.GetService <DesignerPerfEventProvider>().WorkflowDesignerCopyEnd(); }
void OnCreateSendReplyExecute(object sender, ExecutedRoutedEventArgs e) { ModelItem container; ModelItem flowStepContainer; using (ModelEditingScope scope = this.ModelItem.BeginEdit((string)this.FindResource("createSendReplyDescription"))) { //special case handling for Sequence if (this.ModelItem.IsItemInSequence(out container)) { //get activities collection ModelItemCollection activities = container.Properties["Activities"].Collection; //get index of Send within collection and increment by one int index = activities.IndexOf(this.ModelItem) + 1; //insert created reply just after the Receive activities.Insert(index, ReceiveDesigner.CreateSendReply(container, this.ModelItem)); } //special case handling for Flowchart else if (this.ModelItem.IsItemInFlowchart(out container, out flowStepContainer)) { Activity replyActivity = ReceiveDesigner.CreateSendReply(container, this.ModelItem); FlowchartDesigner.DropActivityBelow(this.ViewStateService, this.ModelItem, replyActivity, 30); } else { ErrorReporting.ShowAlertMessage(string.Format(CultureInfo.CurrentUICulture, System.Activities.Core.Presentation.SR.CannotPasteSendReplyOrReceiveReply, typeof(SendReply).Name)); } scope.Complete(); } //always copy reply to clipboard Func <ModelItem, object, object> callback = CreateSendReply; CutCopyPasteHelper.PutCallbackOnClipBoard(callback, typeof(SendReply), this.ModelItem); e.Handled = true; }
void OnCopyCommandCanExecute(object sender, CanExecuteRoutedEventArgs e) { Selection selection = this.Context.Items.GetValue <Selection>(); DesignerView designerView = this.Context.Services.GetService <DesignerView>(); if (null != selection && selection.SelectedObjects.Contains(this.ModelItem)) { // Copy is intentionally disabled, when the root (TransitionDesigner) // is selected, because we don't support transition copy on the FreeFormPanel. e.CanExecute = false; } else { e.CanExecute = !this.IsReadOnly && CutCopyPasteHelper.CanCopy(this.Context); } e.ContinueRouting = false; e.Handled = true; }
// Called by the designer to register any design-time metadata. // // Be aware of the accidential performance impact when adding things into this method. // In particular, pay attention to calls that will lead to loading extra assemblies. // public void Register() { AttributeTableBuilder builder = new AttributeTableBuilder(); //shared component builder.AddCustomAttributes(typeof(Collection <Constraint>), new BrowsableAttribute(false)); builder.AddCustomAttributes(typeof(string), new EditorReuseAttribute(false)); builder.AddCustomAttributes(typeof(ActivityAction), new EditorReuseAttribute(false)); builder.AddCustomAttributes(typeof(XName), new EditorReuseAttribute(false)); //Flowchart activities FlowchartDesigner.RegisterMetadata(builder); FlowSwitchDesigner.RegisterMetadata(builder); FlowDecisionDesigner.RegisterMetadata(builder); // Messaging activities ServiceDesigner.RegisterMetadata(builder); // Registering inline for designers for InitializeCorrelation, Send, Receive, SendReply, ReceiveReply activities to avoid calling // their static constructors. This will avoid instantiating the ResourceDictionary for their PropertyValueEditors during designer load. builder.AddCustomAttributes(typeof(Send), new DesignerAttribute(typeof(SendDesigner))); builder.AddCustomAttributes(typeof(Send), new ActivityDesignerOptionsAttribute { AllowDrillIn = false }); builder.AddCustomAttributes(typeof(Receive), new DesignerAttribute(typeof(ReceiveDesigner))); builder.AddCustomAttributes(typeof(Receive), new ActivityDesignerOptionsAttribute { AllowDrillIn = false }); builder.AddCustomAttributes(typeof(SendReply), new FeatureAttribute(typeof(SendReplyValidationFeature))); builder.AddCustomAttributes(typeof(SendReply), new DesignerAttribute(typeof(SendReplyDesigner))); builder.AddCustomAttributes(typeof(SendReply), new ActivityDesignerOptionsAttribute { AllowDrillIn = false }); CutCopyPasteHelper.AddDisallowedTypeForCopy(typeof(SendReply)); builder.AddCustomAttributes(typeof(ReceiveReply), new FeatureAttribute(typeof(ReceiveReplyValidationFeature))); builder.AddCustomAttributes(typeof(ReceiveReply), new DesignerAttribute(typeof(ReceiveReplyDesigner))); builder.AddCustomAttributes(typeof(ReceiveReply), new ActivityDesignerOptionsAttribute { AllowDrillIn = false }); CutCopyPasteHelper.AddDisallowedTypeForCopy(typeof(ReceiveReply)); builder.AddCustomAttributes(typeof(InitializeCorrelation), new DesignerAttribute(typeof(InitializeCorrelationDesigner))); builder.AddCustomAttributes(typeof(InitializeCorrelation), new ActivityDesignerOptionsAttribute { AllowDrillIn = false }); TransactedReceiveScopeDesigner.RegisterMetadata(builder); CorrelationScopeDesigner.RegisterMetadata(builder); //Procedural activities AssignDesigner.RegisterMetadata(builder); IfElseDesigner.RegisterMetadata(builder); InvokeMethodDesigner.RegisterMetadata(builder); DoWhileDesigner.RegisterMetadata(builder); WhileDesigner.RegisterMetadata(builder); ForEachDesigner.RegisterMetadata(builder); TryCatchDesigner.RegisterMetadata(builder); CatchDesigner.RegisterMetadata(builder); ParallelDesigner.RegisterMetadata(builder); SequenceDesigner.RegisterMetadata(builder); SwitchDesigner.RegisterMetadata(builder); CaseDesigner.RegisterMetadata(builder); //Compensation/Transaction CancellationScopeDesigner.RegisterMetadata(builder); CompensableActivityDesigner.RegisterMetadata(builder); TransactionScopeDesigner.RegisterMetadata(builder); //Misc activities PickDesigner.RegisterMetadata(builder); PickBranchDesigner.RegisterMetadata(builder); WriteLineDesigner.RegisterMetadata(builder); NoPersistScopeDesigner.RegisterMetadata(builder); InvokeDelegateDesigner.RegisterMetadata(builder); // StateMachine StateMachineDesigner.RegisterMetadata(builder); StateDesigner.RegisterMetadata(builder); TransitionDesigner.RegisterMetadata(builder); builder.AddCustomAttributes(typeof(AddToCollection <>), new FeatureAttribute(typeof(UpdatableGenericArgumentsFeature))); builder.AddCustomAttributes(typeof(RemoveFromCollection <>), new FeatureAttribute(typeof(UpdatableGenericArgumentsFeature))); builder.AddCustomAttributes(typeof(ClearCollection <>), new FeatureAttribute(typeof(UpdatableGenericArgumentsFeature))); builder.AddCustomAttributes(typeof(ExistsInCollection <>), new FeatureAttribute(typeof(UpdatableGenericArgumentsFeature))); builder.AddCustomAttributes(typeof(AddToCollection <>), new DefaultTypeArgumentAttribute(typeof(int))); builder.AddCustomAttributes(typeof(RemoveFromCollection <>), new DefaultTypeArgumentAttribute(typeof(int))); builder.AddCustomAttributes(typeof(ClearCollection <>), new DefaultTypeArgumentAttribute(typeof(int))); builder.AddCustomAttributes(typeof(ExistsInCollection <>), new DefaultTypeArgumentAttribute(typeof(int))); MetadataStore.AddAttributeTable(builder.CreateTable()); MorphHelper.AddPropertyValueMorphHelper(typeof(InArgument <>), MorphHelpers.ArgumentMorphHelper); MorphHelper.AddPropertyValueMorphHelper(typeof(OutArgument <>), MorphHelpers.ArgumentMorphHelper); MorphHelper.AddPropertyValueMorphHelper(typeof(InOutArgument <>), MorphHelpers.ArgumentMorphHelper); MorphHelper.AddPropertyValueMorphHelper(typeof(ActivityAction <>), MorphHelpers.ActivityActionMorphHelper); MorphHelper.AddPropertyValueMorphHelper(typeof(ActivityFunc <,>), MorphHelpers.ActivityFuncMorphHelper); // There is no need to keep an reference to this delayed worker since the AppDomain event handler will do it. RegisterMetadataDelayedWorker delayedWorker = new RegisterMetadataDelayedWorker(); delayedWorker.RegisterMetadataDelayed("System.Workflow.Runtime", InteropDesigner.RegisterMetadata); delayedWorker.RegisterMetadataDelayed("System.ServiceModel", RegisterMetadataForMessagingActivitiesSearchMetadata); delayedWorker.RegisterMetadataDelayed("System.ServiceModel", RegisterMetadataForMessagingActivitiesPropertyEditors); delayedWorker.WorkNowIfApplicable(); }