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
- SmiContextFactory.cs
- InternalPermissions.cs
- OleDbPermission.cs
- GAC.cs
- Helpers.cs
- SerializationInfoEnumerator.cs
- SingleObjectCollection.cs
- FontStretch.cs
- storepermission.cs
- XmlDocumentFieldSchema.cs
- Parameter.cs
- Message.cs
- Hash.cs
- StrokeCollectionConverter.cs
- MetaColumn.cs
- Debug.cs
- WindowsSysHeader.cs
- DataGridViewCellConverter.cs
- DescriptionAttribute.cs
- DataGridTable.cs
- RightNameExpirationInfoPair.cs
- MonthChangedEventArgs.cs
- MapPathBasedVirtualPathProvider.cs
- GridViewAutomationPeer.cs
- Compiler.cs
- BitmapMetadata.cs
- StatusBarAutomationPeer.cs
- ClientUriBehavior.cs
- XmlLangPropertyAttribute.cs
- BoolExpressionVisitors.cs
- SqlCacheDependency.cs
- UpdatePanel.cs
- AddInDeploymentState.cs
- AuthenticationModuleElement.cs
- TrustManagerPromptUI.cs
- OdbcStatementHandle.cs
- HttpVersion.cs
- ErrorRuntimeConfig.cs
- WeakEventTable.cs
- ClrPerspective.cs
- ProfileWorkflowElement.cs
- LambdaValue.cs
- ControlValuePropertyAttribute.cs
- GridViewRowEventArgs.cs
- BmpBitmapEncoder.cs
- ListenerAdaptersInstallComponent.cs
- HeaderUtility.cs
- CodeDelegateInvokeExpression.cs
- DataServiceQueryException.cs
- OracleDataAdapter.cs
- CollectionType.cs
- UserPreferenceChangingEventArgs.cs
- ConfigXmlSignificantWhitespace.cs
- BooleanConverter.cs
- NativeRightsManagementAPIsStructures.cs
- DBSchemaRow.cs
- InlineUIContainer.cs
- ViewManager.cs
- BamlRecordReader.cs
- DataGridColumn.cs
- Misc.cs
- XmlBinaryReader.cs
- SingleObjectCollection.cs
- OrderedDictionaryStateHelper.cs
- PeerToPeerException.cs
- XmlCharCheckingWriter.cs
- WebPartConnectionsCloseVerb.cs
- ConnectionPointGlyph.cs
- BamlRecordWriter.cs
- OleCmdHelper.cs
- ValidationService.cs
- BitmapFrameEncode.cs
- ResourceReferenceExpressionConverter.cs
- XmlConvert.cs
- DBSqlParserColumnCollection.cs
- SQLSingleStorage.cs
- ObjectPropertyMapping.cs
- PrivilegedConfigurationManager.cs
- BindingGroup.cs
- MobileDeviceCapabilitiesSectionHandler.cs
- AppDomainResourcePerfCounters.cs
- ProcessModuleCollection.cs
- SafeCoTaskMem.cs
- AssemblyName.cs
- DataGridViewRowPrePaintEventArgs.cs
- ResourceReferenceExpression.cs
- Win32NamedPipes.cs
- TagMapCollection.cs
- PopupControlService.cs
- ListViewDeleteEventArgs.cs
- HttpRequestTraceRecord.cs
- ValueConversionAttribute.cs
- AttributeCollection.cs
- TableCell.cs
- ResourceReader.cs
- DataColumnPropertyDescriptor.cs
- KnownIds.cs
- SizeIndependentAnimationStorage.cs
- MsmqIntegrationProcessProtocolHandler.cs
- RegisteredHiddenField.cs