Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / NetFx35 / System.WorkflowServices / System / Workflow / ComponentModel / Design / ActivityDesignerHighlighter.cs / 1305376 / ActivityDesignerHighlighter.cs
//------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------- namespace System.Workflow.ComponentModel.Design { using System; using System.Collections.Generic; using System.Text; using System.Workflow.ComponentModel.Design; using System.ComponentModel.Design; using System.Drawing; using System.ServiceModel; //// Helper class for visuaulizing the highlighted activity group // class ActivityDesignerHighlighter : IServiceProvider { private IDesignerGlyphProviderService glyphProviderService; private HighlightGlyphProvider highlightProvider = null; private ActivityDesigner owner; private WorkflowView workflowView; public ActivityDesignerHighlighter(ActivityDesigner owner) { this.owner = owner; } public object GetService(Type serviceType) { if (serviceType == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("serviceType"); } if (owner.Activity != null && owner.Activity.Site != null) { return owner.Activity.Site.GetService(serviceType); } else { return null; } } public void Highlight(ListhighlightedDesigners) { if (highlightedDesigners == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("hightlightedDesigners"); } glyphProviderService = this.GetService(typeof(IDesignerGlyphProviderService)) as IDesignerGlyphProviderService; workflowView = GetService(typeof(WorkflowView)) as WorkflowView; RemoveCurrentHighlight(); IDesignerHost designerHost = this.GetService(typeof(IDesignerHost)) as IDesignerHost; DesignerHighlighterMesageFilter messageFilter = new DesignerHighlighterMesageFilter(); highlightProvider = new HighlightGlyphProvider(designerHost.GetDesigner(designerHost.RootComponent) as ActivityDesigner, highlightedDesigners); glyphProviderService.AddGlyphProvider(highlightProvider); highlightProvider.MessageFilter = messageFilter; messageFilter.MouseDown += new EventHandler (messageFilter_MouseDown); messageFilter.KeyDown += new EventHandler (messageFilter_KeyDown); workflowView.AddDesignerMessageFilter(messageFilter); workflowView.FitToScreenSize(); } public void RemoveCurrentHighlight() { HighlightGlyphProvider currentHightlightGlyhProvider = null; foreach (IDesignerGlyphProvider glyphProvider in glyphProviderService.GlyphProviders) { if (glyphProvider is HighlightGlyphProvider) { currentHightlightGlyhProvider = (HighlightGlyphProvider) glyphProvider; break; } } if (currentHightlightGlyhProvider != null) { //remove associated designerMessageFilter before removing currentGlyphProvider. workflowView.RemoveDesignerMessageFilter(currentHightlightGlyhProvider.MessageFilter); glyphProviderService.RemoveGlyphProvider(currentHightlightGlyhProvider); } } void messageFilter_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e) { glyphProviderService.RemoveGlyphProvider(highlightProvider); if (workflowView != null) { workflowView.RemoveDesignerMessageFilter(sender as WorkflowDesignerMessageFilter); Point scrollPosition = workflowView.ClientPointToLogical(owner.Location); workflowView.FitToWorkflowSize(); // try to center the owner designer int the the workflowview Size viewSize = workflowView.ClientSizeToLogical(workflowView.ViewPortSize); if (scrollPosition.Y > viewSize.Height / 2) { scrollPosition.Y -= viewSize.Height / 2; } if (scrollPosition.X > viewSize.Width / 2) { scrollPosition.X -= viewSize.Width / 2; } workflowView.ScrollPosition = scrollPosition; } } void messageFilter_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e) { glyphProviderService.RemoveGlyphProvider(highlightProvider); if (workflowView != null) { workflowView.RemoveDesignerMessageFilter(sender as WorkflowDesignerMessageFilter); Point scrollPosition = workflowView.ClientPointToLogical(e.Location); workflowView.FitToWorkflowSize(); // try to center the clicked portion of the workflow in the workflowview Size viewSize = workflowView.ClientSizeToLogical(workflowView.ViewPortSize); if (scrollPosition.Y > viewSize.Height / 2) { scrollPosition.Y -= viewSize.Height / 2; } if (scrollPosition.X > viewSize.Width / 2) { scrollPosition.X -= viewSize.Width / 2; } workflowView.ScrollPosition = scrollPosition; } } // this is the message filter inserted in the workflowview to escape back to the normal view // from the highlighted view. since glyphs cant take mouse events, this is the only way to // detect mouseclicks when in highlighted view. internal sealed class DesignerHighlighterMesageFilter : WorkflowDesignerMessageFilter { public event EventHandler KeyDown; public event EventHandler MouseDown; protected override bool OnKeyDown(System.Windows.Forms.KeyEventArgs eventArgs) { if (KeyDown != null) { KeyDown(this, eventArgs); } // let event pass down to others. we dont want to mark it as handled return false; } protected override bool OnMouseDown(System.Windows.Forms.MouseEventArgs eventArgs) { if (MouseDown != null) { MouseDown(this, eventArgs); } // let event pass down to others. we dont want to mark it as handled return false; } } internal sealed class HighlightGlyphProvider : IDesignerGlyphProvider { private List highlightedDesigners; private DesignerHighlighterMesageFilter messageFilter; private ActivityDesigner rootDesigner; public HighlightGlyphProvider(ActivityDesigner rootDesigner, List highlightedDesigners) { this.RootDesigner = rootDesigner; this.HighlightedDesigners = highlightedDesigners; } public List HighlightedDesigners { get { return highlightedDesigners; } set { highlightedDesigners = value; } } public DesignerHighlighterMesageFilter MessageFilter { get { return messageFilter; } set { messageFilter = value; } } public ActivityDesigner RootDesigner { get { return rootDesigner; } set { rootDesigner = value; } } public ActivityDesignerGlyphCollection GetGlyphs(ActivityDesigner activityDesigner) { if (activityDesigner == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("activityDesigner"); } if (!activityDesigner.IsRootDesigner) { return null; } ActivityDesignerGlyphCollection glyphs = new ActivityDesignerGlyphCollection(); glyphs.Add(new HighlightOverlayGlyph(activityDesigner.Bounds, HighlightedDesigners)); return glyphs; } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- UpdateDelegates.Generated.cs
- XmlSchemaSimpleContentRestriction.cs
- OperationBehaviorAttribute.cs
- ImmutableObjectAttribute.cs
- TripleDESCryptoServiceProvider.cs
- SqlServices.cs
- FilterableData.cs
- BuildManagerHost.cs
- GridPatternIdentifiers.cs
- SqlCrossApplyToCrossJoin.cs
- CachedBitmap.cs
- BaseDataListActionList.cs
- FixUp.cs
- X509Certificate2Collection.cs
- XmlObjectSerializer.cs
- DragEventArgs.cs
- RequestCacheManager.cs
- EraserBehavior.cs
- PassportAuthenticationModule.cs
- ReadOnlyPropertyMetadata.cs
- HttpFormatExtensions.cs
- DrawListViewSubItemEventArgs.cs
- AtomicFile.cs
- CngProperty.cs
- ImageSourceConverter.cs
- BasicKeyConstraint.cs
- ErrorEventArgs.cs
- DependencyPropertyHelper.cs
- ValidationHelper.cs
- TypeElement.cs
- MouseCaptureWithinProperty.cs
- WorkflowMarkupSerializationManager.cs
- Focus.cs
- DataKeyPropertyAttribute.cs
- TickBar.cs
- SQLMoneyStorage.cs
- DiscoveryOperationContextExtension.cs
- PerformanceCounter.cs
- AssemblyCache.cs
- Propagator.Evaluator.cs
- XmlSchemaSimpleContentRestriction.cs
- CurrentChangedEventManager.cs
- RayHitTestParameters.cs
- HtmlTableCellCollection.cs
- DbSourceCommand.cs
- MetadataWorkspace.cs
- WebPart.cs
- DataGridColumnEventArgs.cs
- CompoundFileIOPermission.cs
- DataKeyArray.cs
- UniqueCodeIdentifierScope.cs
- PathData.cs
- XmlSchema.cs
- SQLString.cs
- NetDataContractSerializer.cs
- MediaSystem.cs
- coordinatorscratchpad.cs
- CryptoKeySecurity.cs
- xmlsaver.cs
- ArrayElementGridEntry.cs
- ClickablePoint.cs
- DerivedKeyCachingSecurityTokenSerializer.cs
- TextServicesHost.cs
- OrderablePartitioner.cs
- TripleDESCryptoServiceProvider.cs
- GACIdentityPermission.cs
- XmlWhitespace.cs
- GridViewHeaderRowPresenter.cs
- FrameworkElementFactory.cs
- XmlDigitalSignatureProcessor.cs
- LicenseContext.cs
- Bezier.cs
- CodeExporter.cs
- CustomErrorCollection.cs
- AttachedAnnotationChangedEventArgs.cs
- DBConnection.cs
- PartitionerStatic.cs
- ServerIdentity.cs
- DocumentGridContextMenu.cs
- bindurihelper.cs
- SafeMarshalContext.cs
- AppSettingsReader.cs
- ButtonBaseAutomationPeer.cs
- CustomValidator.cs
- WindowsTooltip.cs
- NegatedConstant.cs
- StyleXamlParser.cs
- IIS7WorkerRequest.cs
- ResumeStoryboard.cs
- ProviderSettings.cs
- FileVersion.cs
- ChangePassword.cs
- DllHostInitializer.cs
- PipeException.cs
- SchemaCreator.cs
- ResourcePermissionBaseEntry.cs
- AnnotationDocumentPaginator.cs
- NodeLabelEditEvent.cs
- AvtEvent.cs
- TextEmbeddedObject.cs