Code:
/ 4.0 / 4.0 / untmp / 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.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- AdornerLayer.cs
- FormatStringEditor.cs
- StackBuilderSink.cs
- ToolboxItemCollection.cs
- ValidatorUtils.cs
- BitmapEffectState.cs
- SqlCrossApplyToCrossJoin.cs
- ApplicationSecurityInfo.cs
- AccessKeyManager.cs
- QueryStatement.cs
- LockedHandleGlyph.cs
- AdornerDecorator.cs
- UnitySerializationHolder.cs
- Msmq4SubqueuePoisonHandler.cs
- FlowchartSizeFeature.cs
- CodeTypeParameterCollection.cs
- MatrixStack.cs
- DataGridToolTip.cs
- DetailsViewInsertEventArgs.cs
- ScriptReference.cs
- AssemblyResourceLoader.cs
- CultureTable.cs
- KerberosRequestorSecurityToken.cs
- ColumnMap.cs
- StrokeIntersection.cs
- RootCodeDomSerializer.cs
- XmlDocumentSerializer.cs
- PrintDialog.cs
- COM2TypeInfoProcessor.cs
- DataFormat.cs
- ByteStack.cs
- RelationshipNavigation.cs
- ScaleTransform.cs
- ToolStripSeparator.cs
- Native.cs
- SecurityResources.cs
- SessionStateModule.cs
- PropertyChangeTracker.cs
- RadioButtonList.cs
- PassportAuthenticationEventArgs.cs
- TypeBuilderInstantiation.cs
- WebPartVerbCollection.cs
- SplitterPanel.cs
- LicenseContext.cs
- HttpPostClientProtocol.cs
- BitmapEncoder.cs
- XmlSchemaObject.cs
- ReadOnlyAttribute.cs
- EntityDataSourceDesignerHelper.cs
- RoleGroupCollection.cs
- DisposableCollectionWrapper.cs
- ZipIOBlockManager.cs
- WebPartConnectionsCancelVerb.cs
- RtfControls.cs
- EmptyQuery.cs
- NativeCompoundFileAPIs.cs
- MenuItem.cs
- TextCharacters.cs
- DirectoryRootQuery.cs
- Vector3DValueSerializer.cs
- CodeTypeConstructor.cs
- KeyValueInternalCollection.cs
- rsa.cs
- __ComObject.cs
- ListView.cs
- EdmRelationshipRoleAttribute.cs
- TransactionChannel.cs
- PersonalizationStateInfo.cs
- WebCategoryAttribute.cs
- EtwTrace.cs
- RoleManagerEventArgs.cs
- OleDbDataReader.cs
- TransformDescriptor.cs
- ValueUnavailableException.cs
- Point4D.cs
- ThemeableAttribute.cs
- X509WindowsSecurityToken.cs
- TypeResolver.cs
- DataTable.cs
- ControlValuePropertyAttribute.cs
- WebZone.cs
- Region.cs
- ServiceContractViewControl.cs
- ListViewGroupConverter.cs
- UnsafeNativeMethodsCLR.cs
- AggregateNode.cs
- ManipulationCompletedEventArgs.cs
- MDIWindowDialog.cs
- assertwrapper.cs
- CharacterHit.cs
- CopyNamespacesAction.cs
- ListViewItem.cs
- HandoffBehavior.cs
- QueryableDataSource.cs
- WpfKnownMemberInvoker.cs
- BinaryNode.cs
- ArithmeticException.cs
- MultiPartWriter.cs
- PropertyFilterAttribute.cs
- HttpRequestTraceRecord.cs