Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / WF / Common / AuthoringOM / Design / MessageFilters / ResizingMessageFilter.cs / 1305376 / ResizingMessageFilter.cs
using System; using System.ComponentModel; using System.ComponentModel.Design; using System.Collections; using System.Drawing; using System.Workflow.ComponentModel; using System.Workflow.ComponentModel.Design; using System.Windows.Forms; using System.Diagnostics; namespace System.Workflow.ComponentModel.Design { internal sealed class ResizingMessageFilter : WorkflowDesignerMessageFilter { private DesignerTransaction designerTransaction; private ActivityDesigner designerToResize = null; private DesignerEdges designerSizingEdge = DesignerEdges.None; protected override void Dispose(bool disposing) { base.Dispose(disposing); } protected override bool OnMouseDown(MouseEventArgs eventArgs) { if (eventArgs.Button == MouseButtons.Left) { WorkflowView workflowView = ParentView; if (workflowView == null) throw new InvalidOperationException(DR.GetString(DR.WorkflowViewNull)); Point clientPoint = new Point(eventArgs.X, eventArgs.Y); Point logicalPoint = workflowView.ClientPointToLogical(clientPoint); DesignerEdges sizingEdge = DesignerEdges.None; ActivityDesigner designer = GetDesignerToResize(logicalPoint, out sizingEdge); if (designer != null && sizingEdge != DesignerEdges.None && CanResizeDesigner(designer)) SetResizableDesigner(designer, sizingEdge); } return (this.designerToResize != null); } protected override bool OnMouseMove(MouseEventArgs eventArgs) { WorkflowView workflowView = ParentView; if (workflowView == null) throw new InvalidOperationException(DR.GetString(DR.WorkflowViewNull)); bool handledMessage = false; Point clientPoint = new Point(eventArgs.X, eventArgs.Y); Point logicalPoint = workflowView.ClientPointToLogical(clientPoint); DesignerEdges sizingEdge = DesignerEdges.None; if (this.designerToResize != null) { sizingEdge = this.designerSizingEdge; UpdateDesignerSize(logicalPoint, this.designerToResize, this.designerSizingEdge); handledMessage = true; } else if (eventArgs.Button == MouseButtons.None) { ActivityDesigner designer = GetDesignerToResize(logicalPoint, out sizingEdge); if (designer != null && sizingEdge != DesignerEdges.None && CanResizeDesigner(designer)) handledMessage = true; } UpdateCursor(sizingEdge); return handledMessage; } protected override bool OnMouseUp(MouseEventArgs eventArgs) { if (this.designerToResize != null && eventArgs.Button == MouseButtons.Left) { WorkflowView workflowView = ParentView; if (workflowView == null) throw new InvalidOperationException(DR.GetString(DR.WorkflowViewNull)); UpdateDesignerSize(workflowView.ClientPointToLogical(new Point(eventArgs.X, eventArgs.Y)), this.designerToResize, this.designerSizingEdge); } SetResizableDesigner(null, DesignerEdges.None); return false; } protected override bool OnMouseLeave() { if (this.designerToResize != null) SetResizableDesigner(null, DesignerEdges.None); else UpdateCursor(DesignerEdges.None); return false; } protected override bool OnKeyDown(KeyEventArgs eventArgs) { if (eventArgs.KeyValue == (int)Keys.Escape && this.designerToResize != null) { SetResizableDesigner(null, DesignerEdges.None); return true; } else { return false; } } protected override bool OnMouseCaptureChanged() { if (this.designerToResize != null) SetResizableDesigner(null, DesignerEdges.None); return false; } private void UpdateCursor(DesignerEdges sizingEdge) { WorkflowView workflowView = ParentView; if (workflowView == null) throw new InvalidOperationException(DR.GetString(DR.WorkflowViewNull)); Cursor cursorToSet = workflowView.Cursor; if (((sizingEdge & DesignerEdges.Left) > 0 && (sizingEdge & DesignerEdges.Top) > 0) || ((sizingEdge & DesignerEdges.Right) > 0 && (sizingEdge & DesignerEdges.Bottom) > 0)) { cursorToSet = Cursors.SizeNWSE; } else if (((sizingEdge & DesignerEdges.Right) > 0 && (sizingEdge & DesignerEdges.Top) > 0) || ((sizingEdge & DesignerEdges.Left) > 0 && (sizingEdge & DesignerEdges.Bottom) > 0)) { cursorToSet = Cursors.SizeNESW; } else if ((sizingEdge & DesignerEdges.Top) > 0 || (sizingEdge & DesignerEdges.Bottom) > 0) { cursorToSet = Cursors.SizeNS; } else if ((sizingEdge & DesignerEdges.Left) > 0 || (sizingEdge & DesignerEdges.Right) > 0) { cursorToSet = Cursors.SizeWE; } else if (sizingEdge == DesignerEdges.None && (workflowView.Cursor == Cursors.SizeNWSE || workflowView.Cursor == Cursors.SizeNESW || workflowView.Cursor == Cursors.SizeNS || workflowView.Cursor == Cursors.SizeWE)) { cursorToSet = Cursors.Default; } if (workflowView.Cursor != cursorToSet) workflowView.Cursor = cursorToSet; } private ActivityDesigner GetDesignerToResize(Point point, out DesignerEdges sizingEdge) { ActivityDesigner designerToResize = null; sizingEdge = DesignerEdges.None; ISelectionService selectionService = GetService(typeof(ISelectionService)) as ISelectionService; if (selectionService != null) { ArrayList selectedComponents = new ArrayList(selectionService.GetSelectedComponents()); for (int i = 0; i < selectedComponents.Count && designerToResize == null; i++) { Activity activity = selectedComponents[i] as Activity; if (activity != null) { ActivityDesigner potentialResizableDesigner = ActivityDesigner.GetDesigner(activity); if (potentialResizableDesigner != null) { SelectionGlyph selectionGlyph = potentialResizableDesigner.Glyphs[typeof(SelectionGlyph)] as SelectionGlyph; if (selectionGlyph != null) { foreach (Rectangle grabHandle in selectionGlyph.GetGrabHandles(potentialResizableDesigner)) { if (grabHandle.Contains(point)) { designerToResize = potentialResizableDesigner; sizingEdge = GetSizingEdge(designerToResize, point); break; } } } } } } } return designerToResize; } private DesignerEdges GetSizingEdge(ActivityDesigner designer, Point point) { DesignerEdges sizingEdge = DesignerEdges.None; Size selectionSize = WorkflowTheme.CurrentTheme.AmbientTheme.SelectionSize; Rectangle designerBounds = designer.Bounds; if (Math.Floor(DesignerGeometryHelper.DistanceFromPointToLineSegment(point, new Point[] { new Point(designerBounds.Left, designerBounds.Top), new Point(designerBounds.Left, designerBounds.Bottom) })) <= selectionSize.Width + 1) sizingEdge |= DesignerEdges.Left; if (Math.Floor(DesignerGeometryHelper.DistanceFromPointToLineSegment(point, new Point[] { new Point(designerBounds.Left, designerBounds.Top), new Point(designerBounds.Right, designerBounds.Top) })) <= selectionSize.Height + 1) sizingEdge |= DesignerEdges.Top; if (Math.Floor(DesignerGeometryHelper.DistanceFromPointToLineSegment(point, new Point[] { new Point(designerBounds.Right, designerBounds.Top), new Point(designerBounds.Right, designerBounds.Bottom) })) <= selectionSize.Width + 1) sizingEdge |= DesignerEdges.Right; if (Math.Floor(DesignerGeometryHelper.DistanceFromPointToLineSegment(point, new Point[] { new Point(designerBounds.Left, designerBounds.Bottom), new Point(designerBounds.Right, designerBounds.Bottom) })) <= selectionSize.Height + 1) sizingEdge |= DesignerEdges.Bottom; return sizingEdge; } private bool CanResizeDesigner(ActivityDesigner designer) { if (!designer.EnableVisualResizing) return false; if (designer.ParentDesigner != null) { FreeformActivityDesigner freeFormDesigner = designer.ParentDesigner as FreeformActivityDesigner; if (freeFormDesigner != null) return freeFormDesigner.CanResizeContainedDesigner(designer); else return false; } return true; } private void SetResizableDesigner(ActivityDesigner designer, DesignerEdges sizingEdge) { if (this.designerToResize == designer) return; if (designer != null && !CanResizeDesigner(designer)) { Debug.Assert(false); return; } WorkflowView workflowView = ParentView; if (workflowView == null) throw new InvalidOperationException(DR.GetString(DR.WorkflowViewNull)); if (designer != null) { if (this.designerTransaction != null) this.designerTransaction.Cancel(); IDesignerHost designerHost = GetService(typeof(IDesignerHost)) as IDesignerHost; if (designerHost != null) this.designerTransaction = designerHost.CreateTransaction(DR.GetString(DR.ResizeUndoDescription, designer.Text)); ((IWorkflowDesignerMessageSink)designer).OnBeginResizing(sizingEdge); } else { if (this.designerTransaction != null) { this.designerTransaction.Commit(); this.designerTransaction = null; } ((IWorkflowDesignerMessageSink)this.designerToResize).OnEndResizing(); } this.designerToResize = designer; this.designerSizingEdge = sizingEdge; workflowView.Capture = (this.designerToResize != null); UpdateCursor(this.designerSizingEdge); } private void UpdateDesignerSize(Point point, ActivityDesigner designerToSize, DesignerEdges sizingEdge) { WorkflowView workflowView = ParentView; if (workflowView == null) throw new InvalidOperationException(DR.GetString(DR.WorkflowViewNull)); Rectangle clipBounds = Rectangle.Empty; if (designerToSize.ParentDesigner != null) { clipBounds = designerToSize.ParentDesigner.Bounds; Size selectionSize = WorkflowTheme.CurrentTheme.AmbientTheme.SelectionSize; clipBounds.Inflate(-2 * selectionSize.Width, -2 * selectionSize.Height); } Rectangle designerBounds = designerToSize.Bounds; if ((sizingEdge & DesignerEdges.Left) > 0) { int x = point.X; if (!clipBounds.IsEmpty) x = Math.Max(x, clipBounds.X); x = DesignerHelpers.SnapToGrid(new Point(x, 0)).X; designerBounds.Width += (designerBounds.Left - x); int delta = (designerBounds.Width < designerToSize.MinimumSize.Width) ? designerBounds.Width - designerToSize.MinimumSize.Width : 0; designerBounds.X = x + delta; } if ((sizingEdge & DesignerEdges.Top) > 0) { int y = point.Y; if (!clipBounds.IsEmpty) y = Math.Max(y, clipBounds.Y); y = DesignerHelpers.SnapToGrid(new Point(0, y)).Y; designerBounds.Height += (designerBounds.Top - y); int delta = (designerBounds.Height < designerToSize.MinimumSize.Height) ? designerBounds.Height - designerToSize.MinimumSize.Height : 0; designerBounds.Y = y + delta; } if ((sizingEdge & DesignerEdges.Right) > 0) designerBounds.Width += (point.X - designerBounds.Right); if ((sizingEdge & DesignerEdges.Bottom) > 0) designerBounds.Height += (point.Y - designerBounds.Bottom); //Clip to lower bounds and upper bounds designerBounds.Width = Math.Max(designerBounds.Width, designerToSize.MinimumSize.Width); designerBounds.Height = Math.Max(designerBounds.Height, designerToSize.MinimumSize.Height); if (!clipBounds.IsEmpty) designerBounds = Rectangle.Intersect(designerBounds, clipBounds); ((IWorkflowDesignerMessageSink)designerToSize).OnResizing(sizingEdge, designerBounds); } } } // 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
- EntityClassGenerator.cs
- SchemaRegistration.cs
- EnvelopedPkcs7.cs
- MultiViewDesigner.cs
- GeneralTransform3D.cs
- ConfigurationManagerHelperFactory.cs
- CodeStatement.cs
- PasswordRecovery.cs
- ColumnResizeUndoUnit.cs
- XamlStyleSerializer.cs
- SafePipeHandle.cs
- OutputScopeManager.cs
- ExpressionEvaluator.cs
- TimeoutValidationAttribute.cs
- TextContainer.cs
- StatusBarItem.cs
- DockPatternIdentifiers.cs
- AccessedThroughPropertyAttribute.cs
- MatcherBuilder.cs
- brushes.cs
- FormParameter.cs
- DataServiceQuery.cs
- DataDocumentXPathNavigator.cs
- FontStyles.cs
- DetailsViewPageEventArgs.cs
- DateTimeSerializationSection.cs
- UpdateTranslator.cs
- DefaultTextStore.cs
- TaskResultSetter.cs
- InlinedLocationReference.cs
- WindowsFormsLinkLabel.cs
- CompiledRegexRunner.cs
- StreamReader.cs
- XLinq.cs
- PageCache.cs
- WsdlInspector.cs
- SimpleWebHandlerParser.cs
- Logging.cs
- Underline.cs
- ComponentCache.cs
- WebConfigurationHostFileChange.cs
- MemberAssignmentAnalysis.cs
- TextParaLineResult.cs
- ConstructorNeedsTagAttribute.cs
- ToolStripItemGlyph.cs
- MulticastDelegate.cs
- HttpResponseInternalWrapper.cs
- TypeConverterAttribute.cs
- XPathScanner.cs
- DataGridViewComboBoxCell.cs
- ServiceHttpModule.cs
- RichTextBoxDesigner.cs
- XmlSchemaSimpleContent.cs
- BitmapEffectGeneralTransform.cs
- _ServiceNameStore.cs
- HtmlTernaryTree.cs
- SharedPerformanceCounter.cs
- ExpressionVisitor.cs
- TraceRecord.cs
- DataGridViewCheckBoxColumn.cs
- HandlerMappingMemo.cs
- ISFClipboardData.cs
- ProviderConnectionPointCollection.cs
- TextMarkerSource.cs
- VariableAction.cs
- StrokeIntersection.cs
- HostingMessageProperty.cs
- SimplePropertyEntry.cs
- EditorServiceContext.cs
- PropertyRecord.cs
- SystemNetHelpers.cs
- ListParagraph.cs
- LineServicesCallbacks.cs
- RootProfilePropertySettingsCollection.cs
- ByteStreamMessage.cs
- WebPartDisplayModeEventArgs.cs
- InitializerFacet.cs
- StatusBarAutomationPeer.cs
- ResourceReferenceExpression.cs
- httpapplicationstate.cs
- TransformValueSerializer.cs
- GridViewPageEventArgs.cs
- XmlNamespaceMapping.cs
- ADMembershipProvider.cs
- ControllableStoryboardAction.cs
- IdentityModelDictionary.cs
- StrongNameMembershipCondition.cs
- SegmentInfo.cs
- SettingsPropertyNotFoundException.cs
- AsymmetricAlgorithm.cs
- Cursors.cs
- MatrixTransform3D.cs
- EnvironmentPermission.cs
- ListItemConverter.cs
- ContentElement.cs
- Int16AnimationBase.cs
- ColorConverter.cs
- UriExt.cs
- ToolStripDropTargetManager.cs
- ScriptManager.cs