Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / WF / Common / AuthoringOM / Design / MessageFilters / ZoomingMessageFilter.cs / 1305376 / ZoomingMessageFilter.cs
namespace System.Workflow.ComponentModel.Design { using System; using System.Drawing; using System.Diagnostics; using System.Windows.Forms; using System.ComponentModel.Design; #region Class ZoomingMessageFilter ///This MessageFilter needs coordinates in client coordinate system internal sealed class ZoomingMessageFilter : WorkflowDesignerMessageFilter { #region Members and Constructor private static int ZoomIncrement = 20; private static Cursor ZoomInCursor = new Cursor(typeof(WorkflowView), "Resources.zoomin.cur"); private static Cursor ZoomOutCursor = new Cursor(typeof(WorkflowView), "Resources.zoomout.cur"); private static Cursor ZoomDisabledCursor = new Cursor(typeof(WorkflowView), "Resources.zoomno.cur"); private enum ZoomState { In, Out } private ZoomState initialState = ZoomState.In; //which tool to show by default private ZoomState currentState = ZoomState.In; //current tool private DragRectangleMessageFilter fastZoomingMessageFilter = null; private CommandID previousCommand; private Cursor previousCursor = Cursors.Default; internal ZoomingMessageFilter(bool initiateZoomIn) { this.currentState = this.initialState = (initiateZoomIn) ? ZoomState.In : ZoomState.Out; } #endregion #region MessageFilter Overrides protected override void Initialize(WorkflowView parentView) { base.Initialize(parentView); StoreUIState(); RefreshUIState(); } protected override void Dispose(bool disposing) { try { if (this.fastZoomingMessageFilter != null) { this.fastZoomingMessageFilter.DragComplete -= new EventHandler(OnZoomRectComplete); ParentView.RemoveDesignerMessageFilter(this.fastZoomingMessageFilter); this.fastZoomingMessageFilter.Dispose(); this.fastZoomingMessageFilter = null; } RestoreUIState(); } finally { base.Dispose(disposing); } } protected override bool OnShowContextMenu(Point menuPoint) { IMenuCommandService menuCommandService = (IMenuCommandService)GetService(typeof(IMenuCommandService)); if (menuCommandService != null) { menuCommandService.ShowContextMenu(WorkflowMenuCommands.ZoomMenu, menuPoint.X, menuPoint.Y); RefreshUIState(); } return true; } protected override bool OnMouseEnter(MouseEventArgs eventArgs) { RefreshUIState(); return true; } protected override bool OnMouseDown(MouseEventArgs eventArgs) { if (eventArgs.Button == MouseButtons.Left) { this.currentState = ((Control.ModifierKeys & Keys.Shift) != 0) ? ((this.initialState == ZoomState.In) ? ZoomState.Out : ZoomState.In) : this.initialState; bool forwardMessage = (this.fastZoomingMessageFilter == null); RefreshUIState(); if (forwardMessage && this.fastZoomingMessageFilter != null) ((IWorkflowDesignerMessageSink)this.fastZoomingMessageFilter).OnMouseDown(eventArgs); } return true; } protected override bool OnMouseMove(MouseEventArgs eventArgs) { //We do not allow other behaviors to handle this message return true; } protected override bool OnMouseDoubleClick(MouseEventArgs eventArgs) { return true; } protected override bool OnMouseLeave() { return true; } protected override bool OnMouseCaptureChanged() { return true; } protected override bool OnMouseUp(MouseEventArgs eventArgs) { if (eventArgs.Button == MouseButtons.Left && CanContinueZooming) { WorkflowView parentView = ParentView; int zoom = parentView.Zoom + ((this.currentState == ZoomState.In) ? ZoomingMessageFilter.ZoomIncrement : (-1 * ZoomingMessageFilter.ZoomIncrement)); Point center = new Point((this.currentState == ZoomState.In) ? eventArgs.X : parentView.ViewPortSize.Width / 2, (this.currentState == ZoomState.In) ? eventArgs.Y : parentView.ViewPortSize.Height / 2); UpdateZoom(zoom, center); } return true; } protected override bool OnKeyDown(KeyEventArgs eventArgs) { if (eventArgs.KeyValue == (int)Keys.Escape) { ParentView.RemoveDesignerMessageFilter(this); } else { this.currentState = ((eventArgs.Modifiers & Keys.Shift) != 0) ? ((this.initialState == ZoomState.In) ? ZoomState.Out : ZoomState.In) : this.initialState; RefreshUIState(); } return true; } protected override bool OnKeyUp(KeyEventArgs eventArgs) { this.currentState = ((eventArgs.Modifiers & Keys.Shift) != 0) ? ((this.initialState == ZoomState.In) ? ZoomState.Out : ZoomState.In) : this.initialState; RefreshUIState(); return true; } protected override bool OnDragEnter(DragEventArgs eventArgs) { ParentView.RemoveDesignerMessageFilter(this); return false; } #endregion #region Helpers internal bool ZoomingIn { get { return (this.initialState == ZoomState.In); } } private void OnZoomRectComplete(object sender, EventArgs e) { Debug.Assert(this.currentState == ZoomState.In && CanContinueZooming && this.fastZoomingMessageFilter != null); if (CanContinueZooming && this.currentState == ZoomState.In && this.fastZoomingMessageFilter != null && !this.fastZoomingMessageFilter.DragRectangle.IsEmpty) { Rectangle dragRectangle = this.fastZoomingMessageFilter.DragRectangle; WorkflowView parentView = ParentView; Point center = parentView.LogicalPointToClient(new Point(dragRectangle.Location.X + dragRectangle.Width / 2, dragRectangle.Location.Y + dragRectangle.Height / 2)); int zoom = (int)(Math.Min((float)parentView.ViewPortSize.Width / (float)dragRectangle.Width, (float)parentView.ViewPortSize.Height / (float)dragRectangle.Height) * 100.0f); UpdateZoom(zoom, center); } } private void UpdateZoom(int zoomLevel, Point center) { PointF relativeCenterF = PointF.Empty; WorkflowView parentView = ParentView; Point layoutOrigin = parentView.LogicalPointToClient(Point.Empty); center.X -= layoutOrigin.X; center.Y -= layoutOrigin.Y; relativeCenterF = new PointF((float)center.X / (float)parentView.HScrollBar.Maximum, (float)center.Y / (float)parentView.VScrollBar.Maximum); parentView.Zoom = Math.Min(Math.Max(zoomLevel, AmbientTheme.MinZoom), AmbientTheme.MaxZoom); Point newCenter = new Point((int)((float)parentView.HScrollBar.Maximum * relativeCenterF.X), (int)((float)parentView.VScrollBar.Maximum * relativeCenterF.Y)); parentView.ScrollPosition = new Point(newCenter.X - parentView.HScrollBar.LargeChange / 2, newCenter.Y - parentView.VScrollBar.LargeChange / 2); this.currentState = ((Control.ModifierKeys & Keys.Shift) != 0) ? ((this.initialState == ZoomState.In) ? ZoomState.Out : ZoomState.In) : this.initialState; RefreshUIState(); } private bool CanContinueZooming { get { WorkflowView parentView = ParentView; return ((this.currentState == ZoomState.Out && parentView.Zoom > AmbientTheme.MinZoom) || (this.currentState == ZoomState.In && parentView.Zoom < AmbientTheme.MaxZoom)); } } private void StoreUIState() { IMenuCommandService menuCommandService = GetService(typeof(IMenuCommandService)) as IMenuCommandService; if (menuCommandService != null) { foreach (CommandID affectedCommand in CommandSet.NavigationToolCommandIds) { MenuCommand menuCommand = menuCommandService.FindCommand(affectedCommand); if (menuCommand != null && menuCommand.Enabled && menuCommand.Checked) { this.previousCommand = menuCommand.CommandID; break; } } } this.previousCursor = ParentView.Cursor; } private void RestoreUIState() { IMenuCommandService menuCommandService = GetService(typeof(IMenuCommandService)) as IMenuCommandService; if (menuCommandService != null) { foreach (CommandID affectedCommand in CommandSet.NavigationToolCommandIds) { MenuCommand menuCommand = menuCommandService.FindCommand(affectedCommand); if (menuCommand != null && menuCommand.Enabled) menuCommand.Checked = (menuCommand.CommandID == this.previousCommand); } } ParentView.Cursor = this.previousCursor; } private void RefreshUIState() { //Update the cursor WorkflowView parentView = ParentView; if (!CanContinueZooming) parentView.Cursor = ZoomingMessageFilter.ZoomDisabledCursor; else if (this.currentState == ZoomState.In) parentView.Cursor = ZoomingMessageFilter.ZoomInCursor; else parentView.Cursor = ZoomingMessageFilter.ZoomOutCursor; //Update the fast zoom if (this.fastZoomingMessageFilter == null && CanContinueZooming && this.currentState == ZoomState.In) { this.fastZoomingMessageFilter = new DragRectangleMessageFilter(); this.fastZoomingMessageFilter.DragComplete += new EventHandler(OnZoomRectComplete); parentView.AddDesignerMessageFilter(this.fastZoomingMessageFilter); } else if (this.fastZoomingMessageFilter != null && (!CanContinueZooming || this.currentState != ZoomState.In)) { this.fastZoomingMessageFilter.DragComplete -= new EventHandler(OnZoomRectComplete); parentView.RemoveDesignerMessageFilter(this.fastZoomingMessageFilter); this.fastZoomingMessageFilter = null; } //Update the menu IMenuCommandService menuCommandService = GetService(typeof(IMenuCommandService)) as IMenuCommandService; if (menuCommandService != null) { foreach (CommandID affectedCommand in CommandSet.NavigationToolCommandIds) { MenuCommand menuCommand = menuCommandService.FindCommand(affectedCommand); if (menuCommand != null && menuCommand.Enabled) menuCommand.Checked = (menuCommand.CommandID == ((this.initialState == ZoomState.In) ? WorkflowMenuCommands.ZoomIn : WorkflowMenuCommands.ZoomOut)); } } } #endregion } #endregion } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved. namespace System.Workflow.ComponentModel.Design { using System; using System.Drawing; using System.Diagnostics; using System.Windows.Forms; using System.ComponentModel.Design; #region Class ZoomingMessageFilter ///This MessageFilter needs coordinates in client coordinate system internal sealed class ZoomingMessageFilter : WorkflowDesignerMessageFilter { #region Members and Constructor private static int ZoomIncrement = 20; private static Cursor ZoomInCursor = new Cursor(typeof(WorkflowView), "Resources.zoomin.cur"); private static Cursor ZoomOutCursor = new Cursor(typeof(WorkflowView), "Resources.zoomout.cur"); private static Cursor ZoomDisabledCursor = new Cursor(typeof(WorkflowView), "Resources.zoomno.cur"); private enum ZoomState { In, Out } private ZoomState initialState = ZoomState.In; //which tool to show by default private ZoomState currentState = ZoomState.In; //current tool private DragRectangleMessageFilter fastZoomingMessageFilter = null; private CommandID previousCommand; private Cursor previousCursor = Cursors.Default; internal ZoomingMessageFilter(bool initiateZoomIn) { this.currentState = this.initialState = (initiateZoomIn) ? ZoomState.In : ZoomState.Out; } #endregion #region MessageFilter Overrides protected override void Initialize(WorkflowView parentView) { base.Initialize(parentView); StoreUIState(); RefreshUIState(); } protected override void Dispose(bool disposing) { try { if (this.fastZoomingMessageFilter != null) { this.fastZoomingMessageFilter.DragComplete -= new EventHandler(OnZoomRectComplete); ParentView.RemoveDesignerMessageFilter(this.fastZoomingMessageFilter); this.fastZoomingMessageFilter.Dispose(); this.fastZoomingMessageFilter = null; } RestoreUIState(); } finally { base.Dispose(disposing); } } protected override bool OnShowContextMenu(Point menuPoint) { IMenuCommandService menuCommandService = (IMenuCommandService)GetService(typeof(IMenuCommandService)); if (menuCommandService != null) { menuCommandService.ShowContextMenu(WorkflowMenuCommands.ZoomMenu, menuPoint.X, menuPoint.Y); RefreshUIState(); } return true; } protected override bool OnMouseEnter(MouseEventArgs eventArgs) { RefreshUIState(); return true; } protected override bool OnMouseDown(MouseEventArgs eventArgs) { if (eventArgs.Button == MouseButtons.Left) { this.currentState = ((Control.ModifierKeys & Keys.Shift) != 0) ? ((this.initialState == ZoomState.In) ? ZoomState.Out : ZoomState.In) : this.initialState; bool forwardMessage = (this.fastZoomingMessageFilter == null); RefreshUIState(); if (forwardMessage && this.fastZoomingMessageFilter != null) ((IWorkflowDesignerMessageSink)this.fastZoomingMessageFilter).OnMouseDown(eventArgs); } return true; } protected override bool OnMouseMove(MouseEventArgs eventArgs) { //We do not allow other behaviors to handle this message return true; } protected override bool OnMouseDoubleClick(MouseEventArgs eventArgs) { return true; } protected override bool OnMouseLeave() { return true; } protected override bool OnMouseCaptureChanged() { return true; } protected override bool OnMouseUp(MouseEventArgs eventArgs) { if (eventArgs.Button == MouseButtons.Left && CanContinueZooming) { WorkflowView parentView = ParentView; int zoom = parentView.Zoom + ((this.currentState == ZoomState.In) ? ZoomingMessageFilter.ZoomIncrement : (-1 * ZoomingMessageFilter.ZoomIncrement)); Point center = new Point((this.currentState == ZoomState.In) ? eventArgs.X : parentView.ViewPortSize.Width / 2, (this.currentState == ZoomState.In) ? eventArgs.Y : parentView.ViewPortSize.Height / 2); UpdateZoom(zoom, center); } return true; } protected override bool OnKeyDown(KeyEventArgs eventArgs) { if (eventArgs.KeyValue == (int)Keys.Escape) { ParentView.RemoveDesignerMessageFilter(this); } else { this.currentState = ((eventArgs.Modifiers & Keys.Shift) != 0) ? ((this.initialState == ZoomState.In) ? ZoomState.Out : ZoomState.In) : this.initialState; RefreshUIState(); } return true; } protected override bool OnKeyUp(KeyEventArgs eventArgs) { this.currentState = ((eventArgs.Modifiers & Keys.Shift) != 0) ? ((this.initialState == ZoomState.In) ? ZoomState.Out : ZoomState.In) : this.initialState; RefreshUIState(); return true; } protected override bool OnDragEnter(DragEventArgs eventArgs) { ParentView.RemoveDesignerMessageFilter(this); return false; } #endregion #region Helpers internal bool ZoomingIn { get { return (this.initialState == ZoomState.In); } } private void OnZoomRectComplete(object sender, EventArgs e) { Debug.Assert(this.currentState == ZoomState.In && CanContinueZooming && this.fastZoomingMessageFilter != null); if (CanContinueZooming && this.currentState == ZoomState.In && this.fastZoomingMessageFilter != null && !this.fastZoomingMessageFilter.DragRectangle.IsEmpty) { Rectangle dragRectangle = this.fastZoomingMessageFilter.DragRectangle; WorkflowView parentView = ParentView; Point center = parentView.LogicalPointToClient(new Point(dragRectangle.Location.X + dragRectangle.Width / 2, dragRectangle.Location.Y + dragRectangle.Height / 2)); int zoom = (int)(Math.Min((float)parentView.ViewPortSize.Width / (float)dragRectangle.Width, (float)parentView.ViewPortSize.Height / (float)dragRectangle.Height) * 100.0f); UpdateZoom(zoom, center); } } private void UpdateZoom(int zoomLevel, Point center) { PointF relativeCenterF = PointF.Empty; WorkflowView parentView = ParentView; Point layoutOrigin = parentView.LogicalPointToClient(Point.Empty); center.X -= layoutOrigin.X; center.Y -= layoutOrigin.Y; relativeCenterF = new PointF((float)center.X / (float)parentView.HScrollBar.Maximum, (float)center.Y / (float)parentView.VScrollBar.Maximum); parentView.Zoom = Math.Min(Math.Max(zoomLevel, AmbientTheme.MinZoom), AmbientTheme.MaxZoom); Point newCenter = new Point((int)((float)parentView.HScrollBar.Maximum * relativeCenterF.X), (int)((float)parentView.VScrollBar.Maximum * relativeCenterF.Y)); parentView.ScrollPosition = new Point(newCenter.X - parentView.HScrollBar.LargeChange / 2, newCenter.Y - parentView.VScrollBar.LargeChange / 2); this.currentState = ((Control.ModifierKeys & Keys.Shift) != 0) ? ((this.initialState == ZoomState.In) ? ZoomState.Out : ZoomState.In) : this.initialState; RefreshUIState(); } private bool CanContinueZooming { get { WorkflowView parentView = ParentView; return ((this.currentState == ZoomState.Out && parentView.Zoom > AmbientTheme.MinZoom) || (this.currentState == ZoomState.In && parentView.Zoom < AmbientTheme.MaxZoom)); } } private void StoreUIState() { IMenuCommandService menuCommandService = GetService(typeof(IMenuCommandService)) as IMenuCommandService; if (menuCommandService != null) { foreach (CommandID affectedCommand in CommandSet.NavigationToolCommandIds) { MenuCommand menuCommand = menuCommandService.FindCommand(affectedCommand); if (menuCommand != null && menuCommand.Enabled && menuCommand.Checked) { this.previousCommand = menuCommand.CommandID; break; } } } this.previousCursor = ParentView.Cursor; } private void RestoreUIState() { IMenuCommandService menuCommandService = GetService(typeof(IMenuCommandService)) as IMenuCommandService; if (menuCommandService != null) { foreach (CommandID affectedCommand in CommandSet.NavigationToolCommandIds) { MenuCommand menuCommand = menuCommandService.FindCommand(affectedCommand); if (menuCommand != null && menuCommand.Enabled) menuCommand.Checked = (menuCommand.CommandID == this.previousCommand); } } ParentView.Cursor = this.previousCursor; } private void RefreshUIState() { //Update the cursor WorkflowView parentView = ParentView; if (!CanContinueZooming) parentView.Cursor = ZoomingMessageFilter.ZoomDisabledCursor; else if (this.currentState == ZoomState.In) parentView.Cursor = ZoomingMessageFilter.ZoomInCursor; else parentView.Cursor = ZoomingMessageFilter.ZoomOutCursor; //Update the fast zoom if (this.fastZoomingMessageFilter == null && CanContinueZooming && this.currentState == ZoomState.In) { this.fastZoomingMessageFilter = new DragRectangleMessageFilter(); this.fastZoomingMessageFilter.DragComplete += new EventHandler(OnZoomRectComplete); parentView.AddDesignerMessageFilter(this.fastZoomingMessageFilter); } else if (this.fastZoomingMessageFilter != null && (!CanContinueZooming || this.currentState != ZoomState.In)) { this.fastZoomingMessageFilter.DragComplete -= new EventHandler(OnZoomRectComplete); parentView.RemoveDesignerMessageFilter(this.fastZoomingMessageFilter); this.fastZoomingMessageFilter = null; } //Update the menu IMenuCommandService menuCommandService = GetService(typeof(IMenuCommandService)) as IMenuCommandService; if (menuCommandService != null) { foreach (CommandID affectedCommand in CommandSet.NavigationToolCommandIds) { MenuCommand menuCommand = menuCommandService.FindCommand(affectedCommand); if (menuCommand != null && menuCommand.Enabled) menuCommand.Checked = (menuCommand.CommandID == ((this.initialState == ZoomState.In) ? WorkflowMenuCommands.ZoomIn : WorkflowMenuCommands.ZoomOut)); } } } #endregion } #endregion } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ThreadPool.cs
- UDPClient.cs
- ResourceReferenceExpressionConverter.cs
- TableLayoutRowStyleCollection.cs
- TypeElementCollection.cs
- NotifyIcon.cs
- LineGeometry.cs
- DropShadowBitmapEffect.cs
- PkcsUtils.cs
- XmlConverter.cs
- TempFiles.cs
- InstallHelper.cs
- InkCanvasSelectionAdorner.cs
- IItemProperties.cs
- SerialReceived.cs
- ObjectDataSourceWizardForm.cs
- ErrorLog.cs
- SpeechSeg.cs
- CodeNamespaceCollection.cs
- SRGSCompiler.cs
- EntityDataSourceContainerNameConverter.cs
- DataGridDesigner.cs
- DataListItemEventArgs.cs
- DataAccessor.cs
- ProfileSettings.cs
- ExpressionEvaluator.cs
- _ConnectStream.cs
- ChannelDispatcher.cs
- GlobalProxySelection.cs
- SelectionUIHandler.cs
- ServicesUtilities.cs
- AssemblyNameProxy.cs
- ConfigXmlCDataSection.cs
- RuleSettings.cs
- ApplicationSecurityInfo.cs
- oledbmetadatacolumnnames.cs
- ConsumerConnectionPointCollection.cs
- ToolStripDropDown.cs
- PopupRoot.cs
- ZipPackagePart.cs
- HybridDictionary.cs
- ContentPlaceHolder.cs
- DebugHandleTracker.cs
- MobileUserControlDesigner.cs
- ThemeInfoAttribute.cs
- DataGridView.cs
- TypeSystemHelpers.cs
- PhysicalAddress.cs
- TabPage.cs
- InheritanceAttribute.cs
- SqlDependencyUtils.cs
- Win32MouseDevice.cs
- FontSource.cs
- GAC.cs
- Predicate.cs
- CapabilitiesPattern.cs
- _SpnDictionary.cs
- SHA384Cng.cs
- GorillaCodec.cs
- PartBasedPackageProperties.cs
- XsltCompileContext.cs
- TypeGeneratedEventArgs.cs
- DecimalConstantAttribute.cs
- SiteMapNode.cs
- DetailsViewUpdateEventArgs.cs
- SiteMapNodeItem.cs
- DBConcurrencyException.cs
- Condition.cs
- Evaluator.cs
- SqlUtil.cs
- CustomCategoryAttribute.cs
- SoapRpcMethodAttribute.cs
- ExclusiveTcpTransportManager.cs
- BitmapInitialize.cs
- GridLengthConverter.cs
- SiteOfOriginPart.cs
- XmlSchemaAnyAttribute.cs
- CRYPTPROTECT_PROMPTSTRUCT.cs
- UnmanagedHandle.cs
- LocalTransaction.cs
- CheckBoxList.cs
- ProfileService.cs
- RegexMatch.cs
- SafeMILHandle.cs
- HtmlControl.cs
- ButtonBaseAutomationPeer.cs
- InstancePersistenceCommand.cs
- HttpRequestContext.cs
- LineSegment.cs
- DebugView.cs
- XmlQuerySequence.cs
- DefaultValueConverter.cs
- SectionInformation.cs
- CompilationSection.cs
- CodeMethodInvokeExpression.cs
- WebBrowserDocumentCompletedEventHandler.cs
- ProgressChangedEventArgs.cs
- QilBinary.cs
- SplitContainerDesigner.cs
- VectorAnimationBase.cs