namespace System.Workflow.Activities { using System; using System.Drawing; using System.Diagnostics; using System.Collections; using System.Windows.Forms; using System.Windows.Forms.Design; using System.ComponentModel; using System.Drawing.Drawing2D; using System.Xml; using System.Collections.Generic; using System.ComponentModel.Design; using System.Workflow.ComponentModel; using System.Workflow.ComponentModel.Design; using System.ComponentModel.Design.Serialization; [ActivityDesignerTheme(typeof(ConditionedActivityGroupDesignerTheme))] internal sealed class ConditionedActivityGroupDesigner : ActivityPreviewDesigner { #region Members, Constructor and Destructor protected override void Initialize(Activity activity) { base.Initialize(activity); IExtenderListService extenderListService = (IExtenderListService)GetService(typeof(IExtenderListService)); if (extenderListService != null) { bool foundCAGExtender = false; foreach (IExtenderProvider extenderProvider in extenderListService.GetExtenderProviders()) { if (extenderProvider.GetType() == typeof(ConditionPropertyProviderExtender)) foundCAGExtender = true; } if (!foundCAGExtender) { IExtenderProviderService extenderProviderService = (IExtenderProviderService)GetService(typeof(IExtenderProviderService)); if (extenderProviderService != null) { extenderProviderService.AddExtenderProvider(new ConditionPropertyProviderExtender()); } } } } protected override void Dispose(bool disposing) { base.Dispose(disposing); } #endregion } #region ConditionedActivityGroupDesignerTheme internal sealed class ConditionedActivityGroupDesignerTheme : ActivityPreviewDesignerTheme { public ConditionedActivityGroupDesignerTheme(WorkflowTheme theme) : base(theme) { this.ShowDropShadow = false; this.ConnectorStartCap = LineAnchor.None; this.ConnectorEndCap = LineAnchor.None; this.ForeColor = Color.FromArgb(0xFF, 0x00, 0x00, 0x00); this.BorderColor = Color.FromArgb(0xFF, 0x6B, 0x6D, 0x6B); this.BorderStyle = DashStyle.Solid; this.BackColorStart = Color.FromArgb(0xFF, 0xEF, 0xEF, 0xEF); this.BackColorEnd = Color.FromArgb(0xFF, 0xEF, 0xEF, 0xEF); this.PreviewForeColor = Color.FromArgb(0xFF, 0xF0, 0xF0, 0xF0); this.PreviewBorderColor = Color.FromArgb(0xFF, 0x6B, 0x6D, 0x6B); this.PreviewBackColor = Color.FromArgb(0xFF, 0xFF, 0xFF, 0xFF); } } #endregion #region Class ConditionPropertyProviderExtender [ProvideProperty("WhenCondition", typeof(Activity))] [ProvideProperty("UnlessCondition", typeof(Activity))] internal sealed class ConditionPropertyProviderExtender : IExtenderProvider { internal ConditionPropertyProviderExtender() { } [SRCategory(SR.ConditionedActivityConditions)] [SRDescription(SR.WhenConditionDescr)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public ActivityCondition GetWhenCondition(Activity activity) { if (activity.Parent is ConditionedActivityGroup) return activity.GetValue(ConditionedActivityGroup.WhenConditionProperty) as ActivityCondition; else return null; } [SRCategory(SR.ConditionedActivityConditions)] [SRDescription(SR.WhenConditionDescr)] public void SetWhenCondition(Activity activity, ActivityCondition handler) { if (activity.Parent is ConditionedActivityGroup) activity.SetValue(ConditionedActivityGroup.WhenConditionProperty, handler); } #region IExtenderProvider Members public bool CanExtend(object extendee) { return ((extendee != this) && (extendee is Activity) && (((Activity)extendee).Parent is ConditionedActivityGroup)); } #endregion } #endregion }