Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / WF / Common / AuthoringOM / Design / SequentialWorkflowRootDesigner.cs / 1305376 / SequentialWorkflowRootDesigner.cs
#pragma warning disable 1634, 1691 namespace System.Workflow.ComponentModel.Design { using System; using System.IO; using System.Drawing; using System.CodeDom; using System.Diagnostics; using System.Collections; using System.Collections.Generic; using System.Windows.Forms; using System.ComponentModel; using System.Globalization; using System.Drawing.Design; using System.Drawing.Imaging; using System.Drawing.Drawing2D; using System.Windows.Forms.Design; using System.ComponentModel.Design; using System.Collections.Specialized; using System.ComponentModel.Design.Serialization; using System.Workflow.ComponentModel.Compiler; using System.Workflow.ComponentModel.Serialization; using System.Collections.ObjectModel; using System.Reflection; using System.Workflow.ComponentModel.Design; using System.Runtime.Serialization.Formatters.Binary; // #region SequentialWorkflowRootDesigner Class ////// Base class for root designer for workflow. It provides a consistent look and feel for all the roots. /// The root designers associated with root activities have to be derived from SequentialWorkflowRootDesigner. /// public class SequentialWorkflowRootDesigner : SequentialActivityDesigner { #region Statics private const int HeaderFooterSizeIncr = 8; private static readonly Image HeaderImage = DR.GetImage(DR.StartWorkflow); private static readonly Image FooterImage = DR.GetImage(DR.EndWorkflow); private static readonly Size PageStripItemSize = new Size(24, 20); private static readonly Size MinSize = new Size(240, 240); #endregion #region Fields //NOTE: The callingDesigner member is only set when the workflow is called from another //workflow, this is used to hookup the parent chain. private WorkflowHeader header; private WorkflowFooter footer; #endregion #region Properties #region Public Properties public override string Text { get { return String.Empty; } } public override Image Image { get { return Header.Image;//smart tag glyph needs an image } } protected override Rectangle ImageRectangle { get { return Rectangle.Empty;//we are using image rect from the header for that... } } public override bool CanExpandCollapse { get { return false; } } public override Size MinimumSize { get { Size minimumSize = base.MinimumSize; minimumSize.Width = Math.Max(minimumSize.Width, SequentialWorkflowRootDesigner.MinSize.Width); minimumSize.Height = Math.Max(minimumSize.Width, SequentialWorkflowRootDesigner.MinSize.Height); if (IsRootDesigner && InvokingDesigner == null) { minimumSize.Width = Math.Max(minimumSize.Width, ParentView.ViewPortSize.Width - 2 * WorkflowRootLayout.Separator.Width); minimumSize.Height = Math.Max(minimumSize.Height, ParentView.ViewPortSize.Height - 2 * WorkflowRootLayout.Separator.Height); } return minimumSize; } } #endregion #region Protected Properties ////// Gets the header associated with SequentialWorkflowRootDesigner /// protected virtual SequentialWorkflowHeaderFooter Header { get { if (this.header == null) this.header = new WorkflowHeader(this); return this.header; } } ////// Gets the footer associated with SequentialWorkflowRootDesigner /// protected virtual SequentialWorkflowHeaderFooter Footer { get { if (this.footer == null) this.footer = new WorkflowFooter(this); return this.footer; } } protected override int TitleHeight { get { int titleHeight = base.TitleHeight; if (Header != null) titleHeight += Header.Bounds.Height; return titleHeight; } } protected override bool ShowSmartTag { get { if (Header != null && !String.IsNullOrEmpty(Header.Text) && this.Views.Count > 1) return true; else return base.ShowSmartTag; } } protected override Rectangle SmartTagRectangle { get { Rectangle smartTagRectangle = Rectangle.Empty; if (Header != null) { smartTagRectangle = Header.ImageRectangle; } return smartTagRectangle; } } protected override CompositeActivityDesigner InvokingDesigner { get { return base.InvokingDesigner; } set { base.InvokingDesigner = value; } } protected internal override ActivityDesignerGlyphCollection Glyphs { get { ActivityDesignerGlyphCollection glyphs = new ActivityDesignerGlyphCollection(base.Glyphs); if (InvokingDesigner != null) glyphs.Add(LockedActivityGlyph.Default); return glyphs; } } #endregion #region Private Properties internal override WorkflowLayout SupportedLayout { get { return new WorkflowRootLayout(Activity.Site); } } private int OptimalHeight { get { CompositeDesignerTheme designerTheme = DesignerTheme as CompositeDesignerTheme; if (designerTheme == null) return 0; //Calculate the size based on child size int optimalHeight = 0; if (ContainedDesigners.Count == 0) { optimalHeight += designerTheme.ConnectorSize.Height; //Add the height of first connector optimalHeight += HelpTextSize.Height; optimalHeight += designerTheme.ConnectorSize.Height; //Add the height of last connector } else { ActivityDesigner activeDesigner = ActiveDesigner; if (activeDesigner == this) optimalHeight += designerTheme.ConnectorSize.Height; AmbientTheme ambientTheme = WorkflowTheme.CurrentTheme.AmbientTheme; foreach (ActivityDesigner activityDesigner in ContainedDesigners) { Size childSize = activityDesigner.Size; optimalHeight += childSize.Height; if (activeDesigner == this) optimalHeight += designerTheme.ConnectorSize.Height; else optimalHeight += 2 * ambientTheme.SelectionSize.Height; } } return optimalHeight; } } #endregion #endregion #region Methods #region Public Methods public override bool CanBeParentedTo(CompositeActivityDesigner parentActivityDesigner) { return false; } #endregion #region Protected Methods protected override ReadOnlyCollectionGetInnerConnections(DesignerEdges edges) { List connectionPoints = new List (base.GetInnerConnections(edges)); if (connectionPoints.Count > 0 && Footer != null && (edges & DesignerEdges.Bottom) > 0) connectionPoints[connectionPoints.Count - 1] = new Point(connectionPoints[connectionPoints.Count - 1].X, connectionPoints[connectionPoints.Count - 1].Y - Footer.Bounds.Height); return connectionPoints.AsReadOnly(); } protected override void OnSmartTagVisibilityChanged(bool visible) { base.OnSmartTagVisibilityChanged(visible); if (Header != null && !Header.TextRectangle.IsEmpty) Invalidate(Header.TextRectangle); } protected override Size OnLayoutSize(ActivityDesignerLayoutEventArgs e) { Size size = base.OnLayoutSize(e); //Make sure that we set the minimum size WorkflowFooter footer = Footer as WorkflowFooter; if (footer != null) size.Height += footer.ImageRectangle.Height + 2 * e.AmbientTheme.Margin.Height + footer.FooterBarRectangle.Size.Height; if (Header != null) Header.OnLayout(e); if (Footer != null) Footer.OnLayout(e); return size; } protected override void OnPaint(ActivityDesignerPaintEventArgs e) { base.OnPaint(e); CompositeDesignerTheme compositeDesignerTheme = e.DesignerTheme as CompositeDesignerTheme; if (compositeDesignerTheme == null) return; //Draw the watermark at right bottom Rectangle watermarkRectangle = Rectangle.Empty; if (compositeDesignerTheme.WatermarkImage != null) { Rectangle bounds = Bounds; bounds.Inflate(-e.AmbientTheme.Margin.Width, -e.AmbientTheme.Margin.Height); watermarkRectangle = ActivityDesignerPaint.GetRectangleFromAlignment(compositeDesignerTheme.Watermar----gnment, bounds, compositeDesignerTheme.WatermarkImage.Size); } //Here we go, draw header and footer rectangles if (Header != null) Header.OnPaint(e); if (Footer != null) Footer.OnPaint(e); } #endregion #region Internal Methods //this is for the workflow header/footer class internal void InternalPerformLayout() { PerformLayout(); } #endregion #endregion #region Nested Classes #region Class WorkflowHeader private sealed class WorkflowHeader : SequentialWorkflowHeaderFooter { public WorkflowHeader(SequentialWorkflowRootDesigner parent) : base(parent, true) { Image = SequentialWorkflowRootDesigner.HeaderImage; } public override Rectangle Bounds { get { Rectangle bounds = base.Bounds; Rectangle textRectangle = base.TextRectangle; if (MinHeaderBarHeight > textRectangle.Height) bounds.Height += (MinHeaderBarHeight - textRectangle.Height); return bounds; } } public override Rectangle TextRectangle { get { Rectangle textRectangle = base.TextRectangle; if (MinHeaderBarHeight > textRectangle.Height) textRectangle.Y += (MinHeaderBarHeight - textRectangle.Height) / 2; return textRectangle; } } public override Rectangle ImageRectangle { get { Rectangle imageRectangle = base.ImageRectangle; if (Image != null) { ActivityDesignerTheme designerTheme = AssociatedDesigner.DesignerTheme; imageRectangle.X -= SequentialWorkflowRootDesigner.HeaderFooterSizeIncr / 2; imageRectangle.Y = HeaderBarRectangle.Bottom + WorkflowTheme.CurrentTheme.AmbientTheme.Margin.Height; imageRectangle.Width += SequentialWorkflowRootDesigner.HeaderFooterSizeIncr; imageRectangle.Height += SequentialWorkflowRootDesigner.HeaderFooterSizeIncr; } return imageRectangle; } } public override void OnPaint(ActivityDesignerPaintEventArgs e) { if (e == null) throw new ArgumentNullException("e"); Rectangle rectangle = HeaderBarRectangle; Color color1 = Color.Empty; Color color2 = Color.FromArgb(50, e.DesignerTheme.BorderColor); using (Brush linearGradientBrush = new LinearGradientBrush(rectangle, color1, color2, LinearGradientMode.Vertical)) { e.Graphics.FillRectangle(linearGradientBrush, rectangle); e.Graphics.DrawLine(e.DesignerTheme.BorderPen, rectangle.Left, rectangle.Bottom, rectangle.Right, rectangle.Bottom); } base.OnPaint(e); } private Rectangle HeaderBarRectangle { get { Rectangle headerBarRectangle = new Rectangle(); headerBarRectangle.Location = AssociatedDesigner.Location; headerBarRectangle.Width = AssociatedDesigner.Size.Width; headerBarRectangle.Height = Math.Max(2 * WorkflowTheme.CurrentTheme.AmbientTheme.Margin.Height + base.textSize.Height, MinHeaderBarHeight); return headerBarRectangle; } } private int MinHeaderBarHeight { get { return 2 * WorkflowTheme.CurrentTheme.AmbientTheme.Margin.Height; } } } #endregion #region Class WorkflowFooter private sealed class WorkflowFooter : SequentialWorkflowHeaderFooter { public WorkflowFooter(SequentialWorkflowRootDesigner parent) : base(parent, false) { Image = SequentialWorkflowRootDesigner.FooterImage; } public override Rectangle Bounds { get { Rectangle bounds = base.Bounds; SequentialWorkflowRootDesigner rootDesigner = AssociatedDesigner as SequentialWorkflowRootDesigner; bounds.Height = Math.Max(bounds.Height, rootDesigner.Size.Height - rootDesigner.TitleHeight - rootDesigner.OptimalHeight); bounds.Y = rootDesigner.Location.Y + rootDesigner.TitleHeight + rootDesigner.OptimalHeight; int minHeight = ImageRectangle.Height; minHeight += (minHeight > 0) ? 2 * WorkflowTheme.CurrentTheme.AmbientTheme.Margin.Height : 0; minHeight += MinFooterBarHeight; bounds.Height = Math.Max(minHeight, bounds.Height); return bounds; } } public override Rectangle ImageRectangle { get { Rectangle imageRectangle = base.ImageRectangle; if (Image != null) { SequentialWorkflowRootDesigner rootDesigner = AssociatedDesigner as SequentialWorkflowRootDesigner; imageRectangle.X -= SequentialWorkflowRootDesigner.HeaderFooterSizeIncr / 2; imageRectangle.Width += SequentialWorkflowRootDesigner.HeaderFooterSizeIncr; imageRectangle.Height += SequentialWorkflowRootDesigner.HeaderFooterSizeIncr; imageRectangle.Y = rootDesigner.Location.Y + rootDesigner.TitleHeight + rootDesigner.OptimalHeight; imageRectangle.Y += WorkflowTheme.CurrentTheme.AmbientTheme.Margin.Height; } return imageRectangle; } } public override void OnPaint(ActivityDesignerPaintEventArgs e) { if (e == null) throw new ArgumentNullException("e"); Rectangle rectangle = FooterBarRectangle; if (!FooterBarRectangle.IsEmpty) { Color color1 = Color.Empty; Color color2 = Color.FromArgb(50, e.DesignerTheme.BorderColor); using (Brush linearGradientBrush = new LinearGradientBrush(rectangle, color2, color1, LinearGradientMode.Vertical)) { e.Graphics.FillRectangle(linearGradientBrush, rectangle); e.Graphics.DrawLine(e.DesignerTheme.BorderPen, rectangle.Left, rectangle.Top, rectangle.Right, rectangle.Top); } } base.OnPaint(e); } internal Rectangle FooterBarRectangle { get { return Rectangle.Empty; } } private int MinFooterBarHeight { get { return 0; } } } #endregion #endregion } #endregion } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved. #pragma warning disable 1634, 1691 namespace System.Workflow.ComponentModel.Design { using System; using System.IO; using System.Drawing; using System.CodeDom; using System.Diagnostics; using System.Collections; using System.Collections.Generic; using System.Windows.Forms; using System.ComponentModel; using System.Globalization; using System.Drawing.Design; using System.Drawing.Imaging; using System.Drawing.Drawing2D; using System.Windows.Forms.Design; using System.ComponentModel.Design; using System.Collections.Specialized; using System.ComponentModel.Design.Serialization; using System.Workflow.ComponentModel.Compiler; using System.Workflow.ComponentModel.Serialization; using System.Collections.ObjectModel; using System.Reflection; using System.Workflow.ComponentModel.Design; using System.Runtime.Serialization.Formatters.Binary; // #region SequentialWorkflowRootDesigner Class /// /// Base class for root designer for workflow. It provides a consistent look and feel for all the roots. /// The root designers associated with root activities have to be derived from SequentialWorkflowRootDesigner. /// public class SequentialWorkflowRootDesigner : SequentialActivityDesigner { #region Statics private const int HeaderFooterSizeIncr = 8; private static readonly Image HeaderImage = DR.GetImage(DR.StartWorkflow); private static readonly Image FooterImage = DR.GetImage(DR.EndWorkflow); private static readonly Size PageStripItemSize = new Size(24, 20); private static readonly Size MinSize = new Size(240, 240); #endregion #region Fields //NOTE: The callingDesigner member is only set when the workflow is called from another //workflow, this is used to hookup the parent chain. private WorkflowHeader header; private WorkflowFooter footer; #endregion #region Properties #region Public Properties public override string Text { get { return String.Empty; } } public override Image Image { get { return Header.Image;//smart tag glyph needs an image } } protected override Rectangle ImageRectangle { get { return Rectangle.Empty;//we are using image rect from the header for that... } } public override bool CanExpandCollapse { get { return false; } } public override Size MinimumSize { get { Size minimumSize = base.MinimumSize; minimumSize.Width = Math.Max(minimumSize.Width, SequentialWorkflowRootDesigner.MinSize.Width); minimumSize.Height = Math.Max(minimumSize.Width, SequentialWorkflowRootDesigner.MinSize.Height); if (IsRootDesigner && InvokingDesigner == null) { minimumSize.Width = Math.Max(minimumSize.Width, ParentView.ViewPortSize.Width - 2 * WorkflowRootLayout.Separator.Width); minimumSize.Height = Math.Max(minimumSize.Height, ParentView.ViewPortSize.Height - 2 * WorkflowRootLayout.Separator.Height); } return minimumSize; } } #endregion #region Protected Properties ////// Gets the header associated with SequentialWorkflowRootDesigner /// protected virtual SequentialWorkflowHeaderFooter Header { get { if (this.header == null) this.header = new WorkflowHeader(this); return this.header; } } ////// Gets the footer associated with SequentialWorkflowRootDesigner /// protected virtual SequentialWorkflowHeaderFooter Footer { get { if (this.footer == null) this.footer = new WorkflowFooter(this); return this.footer; } } protected override int TitleHeight { get { int titleHeight = base.TitleHeight; if (Header != null) titleHeight += Header.Bounds.Height; return titleHeight; } } protected override bool ShowSmartTag { get { if (Header != null && !String.IsNullOrEmpty(Header.Text) && this.Views.Count > 1) return true; else return base.ShowSmartTag; } } protected override Rectangle SmartTagRectangle { get { Rectangle smartTagRectangle = Rectangle.Empty; if (Header != null) { smartTagRectangle = Header.ImageRectangle; } return smartTagRectangle; } } protected override CompositeActivityDesigner InvokingDesigner { get { return base.InvokingDesigner; } set { base.InvokingDesigner = value; } } protected internal override ActivityDesignerGlyphCollection Glyphs { get { ActivityDesignerGlyphCollection glyphs = new ActivityDesignerGlyphCollection(base.Glyphs); if (InvokingDesigner != null) glyphs.Add(LockedActivityGlyph.Default); return glyphs; } } #endregion #region Private Properties internal override WorkflowLayout SupportedLayout { get { return new WorkflowRootLayout(Activity.Site); } } private int OptimalHeight { get { CompositeDesignerTheme designerTheme = DesignerTheme as CompositeDesignerTheme; if (designerTheme == null) return 0; //Calculate the size based on child size int optimalHeight = 0; if (ContainedDesigners.Count == 0) { optimalHeight += designerTheme.ConnectorSize.Height; //Add the height of first connector optimalHeight += HelpTextSize.Height; optimalHeight += designerTheme.ConnectorSize.Height; //Add the height of last connector } else { ActivityDesigner activeDesigner = ActiveDesigner; if (activeDesigner == this) optimalHeight += designerTheme.ConnectorSize.Height; AmbientTheme ambientTheme = WorkflowTheme.CurrentTheme.AmbientTheme; foreach (ActivityDesigner activityDesigner in ContainedDesigners) { Size childSize = activityDesigner.Size; optimalHeight += childSize.Height; if (activeDesigner == this) optimalHeight += designerTheme.ConnectorSize.Height; else optimalHeight += 2 * ambientTheme.SelectionSize.Height; } } return optimalHeight; } } #endregion #endregion #region Methods #region Public Methods public override bool CanBeParentedTo(CompositeActivityDesigner parentActivityDesigner) { return false; } #endregion #region Protected Methods protected override ReadOnlyCollectionGetInnerConnections(DesignerEdges edges) { List connectionPoints = new List (base.GetInnerConnections(edges)); if (connectionPoints.Count > 0 && Footer != null && (edges & DesignerEdges.Bottom) > 0) connectionPoints[connectionPoints.Count - 1] = new Point(connectionPoints[connectionPoints.Count - 1].X, connectionPoints[connectionPoints.Count - 1].Y - Footer.Bounds.Height); return connectionPoints.AsReadOnly(); } protected override void OnSmartTagVisibilityChanged(bool visible) { base.OnSmartTagVisibilityChanged(visible); if (Header != null && !Header.TextRectangle.IsEmpty) Invalidate(Header.TextRectangle); } protected override Size OnLayoutSize(ActivityDesignerLayoutEventArgs e) { Size size = base.OnLayoutSize(e); //Make sure that we set the minimum size WorkflowFooter footer = Footer as WorkflowFooter; if (footer != null) size.Height += footer.ImageRectangle.Height + 2 * e.AmbientTheme.Margin.Height + footer.FooterBarRectangle.Size.Height; if (Header != null) Header.OnLayout(e); if (Footer != null) Footer.OnLayout(e); return size; } protected override void OnPaint(ActivityDesignerPaintEventArgs e) { base.OnPaint(e); CompositeDesignerTheme compositeDesignerTheme = e.DesignerTheme as CompositeDesignerTheme; if (compositeDesignerTheme == null) return; //Draw the watermark at right bottom Rectangle watermarkRectangle = Rectangle.Empty; if (compositeDesignerTheme.WatermarkImage != null) { Rectangle bounds = Bounds; bounds.Inflate(-e.AmbientTheme.Margin.Width, -e.AmbientTheme.Margin.Height); watermarkRectangle = ActivityDesignerPaint.GetRectangleFromAlignment(compositeDesignerTheme.Watermar----gnment, bounds, compositeDesignerTheme.WatermarkImage.Size); } //Here we go, draw header and footer rectangles if (Header != null) Header.OnPaint(e); if (Footer != null) Footer.OnPaint(e); } #endregion #region Internal Methods //this is for the workflow header/footer class internal void InternalPerformLayout() { PerformLayout(); } #endregion #endregion #region Nested Classes #region Class WorkflowHeader private sealed class WorkflowHeader : SequentialWorkflowHeaderFooter { public WorkflowHeader(SequentialWorkflowRootDesigner parent) : base(parent, true) { Image = SequentialWorkflowRootDesigner.HeaderImage; } public override Rectangle Bounds { get { Rectangle bounds = base.Bounds; Rectangle textRectangle = base.TextRectangle; if (MinHeaderBarHeight > textRectangle.Height) bounds.Height += (MinHeaderBarHeight - textRectangle.Height); return bounds; } } public override Rectangle TextRectangle { get { Rectangle textRectangle = base.TextRectangle; if (MinHeaderBarHeight > textRectangle.Height) textRectangle.Y += (MinHeaderBarHeight - textRectangle.Height) / 2; return textRectangle; } } public override Rectangle ImageRectangle { get { Rectangle imageRectangle = base.ImageRectangle; if (Image != null) { ActivityDesignerTheme designerTheme = AssociatedDesigner.DesignerTheme; imageRectangle.X -= SequentialWorkflowRootDesigner.HeaderFooterSizeIncr / 2; imageRectangle.Y = HeaderBarRectangle.Bottom + WorkflowTheme.CurrentTheme.AmbientTheme.Margin.Height; imageRectangle.Width += SequentialWorkflowRootDesigner.HeaderFooterSizeIncr; imageRectangle.Height += SequentialWorkflowRootDesigner.HeaderFooterSizeIncr; } return imageRectangle; } } public override void OnPaint(ActivityDesignerPaintEventArgs e) { if (e == null) throw new ArgumentNullException("e"); Rectangle rectangle = HeaderBarRectangle; Color color1 = Color.Empty; Color color2 = Color.FromArgb(50, e.DesignerTheme.BorderColor); using (Brush linearGradientBrush = new LinearGradientBrush(rectangle, color1, color2, LinearGradientMode.Vertical)) { e.Graphics.FillRectangle(linearGradientBrush, rectangle); e.Graphics.DrawLine(e.DesignerTheme.BorderPen, rectangle.Left, rectangle.Bottom, rectangle.Right, rectangle.Bottom); } base.OnPaint(e); } private Rectangle HeaderBarRectangle { get { Rectangle headerBarRectangle = new Rectangle(); headerBarRectangle.Location = AssociatedDesigner.Location; headerBarRectangle.Width = AssociatedDesigner.Size.Width; headerBarRectangle.Height = Math.Max(2 * WorkflowTheme.CurrentTheme.AmbientTheme.Margin.Height + base.textSize.Height, MinHeaderBarHeight); return headerBarRectangle; } } private int MinHeaderBarHeight { get { return 2 * WorkflowTheme.CurrentTheme.AmbientTheme.Margin.Height; } } } #endregion #region Class WorkflowFooter private sealed class WorkflowFooter : SequentialWorkflowHeaderFooter { public WorkflowFooter(SequentialWorkflowRootDesigner parent) : base(parent, false) { Image = SequentialWorkflowRootDesigner.FooterImage; } public override Rectangle Bounds { get { Rectangle bounds = base.Bounds; SequentialWorkflowRootDesigner rootDesigner = AssociatedDesigner as SequentialWorkflowRootDesigner; bounds.Height = Math.Max(bounds.Height, rootDesigner.Size.Height - rootDesigner.TitleHeight - rootDesigner.OptimalHeight); bounds.Y = rootDesigner.Location.Y + rootDesigner.TitleHeight + rootDesigner.OptimalHeight; int minHeight = ImageRectangle.Height; minHeight += (minHeight > 0) ? 2 * WorkflowTheme.CurrentTheme.AmbientTheme.Margin.Height : 0; minHeight += MinFooterBarHeight; bounds.Height = Math.Max(minHeight, bounds.Height); return bounds; } } public override Rectangle ImageRectangle { get { Rectangle imageRectangle = base.ImageRectangle; if (Image != null) { SequentialWorkflowRootDesigner rootDesigner = AssociatedDesigner as SequentialWorkflowRootDesigner; imageRectangle.X -= SequentialWorkflowRootDesigner.HeaderFooterSizeIncr / 2; imageRectangle.Width += SequentialWorkflowRootDesigner.HeaderFooterSizeIncr; imageRectangle.Height += SequentialWorkflowRootDesigner.HeaderFooterSizeIncr; imageRectangle.Y = rootDesigner.Location.Y + rootDesigner.TitleHeight + rootDesigner.OptimalHeight; imageRectangle.Y += WorkflowTheme.CurrentTheme.AmbientTheme.Margin.Height; } return imageRectangle; } } public override void OnPaint(ActivityDesignerPaintEventArgs e) { if (e == null) throw new ArgumentNullException("e"); Rectangle rectangle = FooterBarRectangle; if (!FooterBarRectangle.IsEmpty) { Color color1 = Color.Empty; Color color2 = Color.FromArgb(50, e.DesignerTheme.BorderColor); using (Brush linearGradientBrush = new LinearGradientBrush(rectangle, color2, color1, LinearGradientMode.Vertical)) { e.Graphics.FillRectangle(linearGradientBrush, rectangle); e.Graphics.DrawLine(e.DesignerTheme.BorderPen, rectangle.Left, rectangle.Top, rectangle.Right, rectangle.Top); } } base.OnPaint(e); } internal Rectangle FooterBarRectangle { get { return Rectangle.Empty; } } private int MinFooterBarHeight { get { return 0; } } } #endregion #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
- WindowsIdentity.cs
- PageContentAsyncResult.cs
- HttpFormatExtensions.cs
- RepeatButtonAutomationPeer.cs
- MsmqInputSessionChannelListener.cs
- SiteMapNode.cs
- SimpleTypeResolver.cs
- GuidelineCollection.cs
- FigureHelper.cs
- WaitHandleCannotBeOpenedException.cs
- DataControlField.cs
- SmtpFailedRecipientsException.cs
- ItemAutomationPeer.cs
- XamlDesignerSerializationManager.cs
- MethodCallConverter.cs
- FileSecurity.cs
- SerializationFieldInfo.cs
- ClassHandlersStore.cs
- Attachment.cs
- PropertyGridView.cs
- ModelTreeEnumerator.cs
- XmlnsPrefixAttribute.cs
- SecureEnvironment.cs
- NullableBoolConverter.cs
- TreeViewImageIndexConverter.cs
- PageRanges.cs
- URL.cs
- TriState.cs
- BindingContext.cs
- SerializerProvider.cs
- ToolbarAUtomationPeer.cs
- TableAutomationPeer.cs
- FixedDSBuilder.cs
- ProtocolViolationException.cs
- HTMLTagNameToTypeMapper.cs
- SqlDataSourceConfigureSortForm.cs
- CompilerGlobalScopeAttribute.cs
- UdpTransportBindingElement.cs
- IsolationInterop.cs
- SessionSwitchEventArgs.cs
- DomainUpDown.cs
- Stylesheet.cs
- WebMessageEncodingElement.cs
- HtmlElementErrorEventArgs.cs
- TaiwanCalendar.cs
- X509SubjectKeyIdentifierClause.cs
- SystemColorTracker.cs
- TextServicesHost.cs
- InvalidAsynchronousStateException.cs
- RuleSettingsCollection.cs
- FactoryGenerator.cs
- HitTestParameters.cs
- mediapermission.cs
- CqlGenerator.cs
- ConfigPathUtility.cs
- CompositeDesignerAccessibleObject.cs
- RecipientServiceModelSecurityTokenRequirement.cs
- TabPanel.cs
- XPathAncestorIterator.cs
- AssemblyUtil.cs
- HttpHostedTransportConfiguration.cs
- OdbcDataAdapter.cs
- TemplateNameScope.cs
- PKCS1MaskGenerationMethod.cs
- QueryAccessibilityHelpEvent.cs
- BigIntegerStorage.cs
- DbParameterHelper.cs
- PointConverter.cs
- CodeTypeParameterCollection.cs
- DummyDataSource.cs
- DataGridViewDataConnection.cs
- PlanCompiler.cs
- ContentOperations.cs
- CreatingCookieEventArgs.cs
- DefaultEvaluationContext.cs
- WebPartConnectVerb.cs
- OrderedParallelQuery.cs
- TraceLevelStore.cs
- ManifestResourceInfo.cs
- ConsoleCancelEventArgs.cs
- connectionpool.cs
- AbandonedMutexException.cs
- SettingsProviderCollection.cs
- AssemblyAttributes.cs
- SelectionProviderWrapper.cs
- BamlRecordWriter.cs
- XmlSerializerObjectSerializer.cs
- JsonQNameDataContract.cs
- SamlSecurityTokenAuthenticator.cs
- CollectionViewGroup.cs
- Calendar.cs
- BinaryObjectWriter.cs
- MatrixValueSerializer.cs
- EmbossBitmapEffect.cs
- BaseCollection.cs
- XNameTypeConverter.cs
- CompensatableTransactionScopeActivityDesigner.cs
- RelationshipManager.cs
- TimeSpanSecondsConverter.cs
- Message.cs