File: Designers\CAGDesigner.cs
Project: ndp\cdf\src\WF\Activities\System.Workflow.Activities.csproj (System.Workflow.Activities)
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
}