Multivariate renderer
PropPageForm.cs
// Copyright 2012 ESRI
// 
// All rights reserved under the copyright laws of the United States
// and applicable international laws, treaties, and conventions.
// 
// You may freely redistribute and use this sample code, with or
// without modification, provided you include the original copyright
// notice and use restrictions.
// 
// See the use restrictions.
// 


using System;
using System.Collections;
using System.Data;
using System.Diagnostics;

using ESRI.ArcGIS.Framework;
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.CartoUI;
using ESRI.ArcGIS.esriSystem;
using ESRI.ArcGIS.Geodatabase;
using ESRI.ArcGIS.Geometry;

namespace MultivariateRenderers
{
  public class PropPageForm : System.Windows.Forms.Form
  {

    private enum eRendererType: int
    {
      eShapePattern,
      eColor,
      eSize
    }

    private bool m_PageIsDirty = false;
    private IComPropertyPageSite m_pSite;
    private IMap m_pMap;
    private IGeoFeatureLayer m_pCurrentLayer;
    private IFeatureRenderer m_pRend;

    private IFeatureRenderer[] m_pShapePatternRendList;
    private IFeatureRenderer[] m_pColorRendList; // we could have separate lists for hue, sat/val, etc, but keep it simple for now
    private IFeatureRenderer[] m_pSizeRendList;

    private EColorCombinationType m_eColorCombinationMethod;
    private IFeatureRenderer m_pShapePatternRend;
    private IFeatureRenderer m_pColorRend1;
    private IFeatureRenderer m_pColorRend2;
    private IFeatureRenderer m_pSizeRend;


  #region  Windows Form Designer generated code 

    public PropPageForm() : base()
    {

      //This call is required by the Windows Form Designer.
      InitializeComponent();

      //Add any initialization after the InitializeComponent() call

    }

    //Form overrides dispose to clean up the component list.
    protected override void Dispose(bool disposing)
    {
      if (disposing)
      {
        if (components != null)
          components.Dispose();
      }
      base.Dispose(disposing);
    }

    //Required by the Windows Form Designer
    private System.ComponentModel.IContainer components;

    //NOTE: The following procedure is required by the Windows Form Designer
    //It can be modified using the Windows Form Designer.  
    //Do not modify it using the code editor.
    internal System.Windows.Forms.ComboBox cboShapePattern;
    internal System.Windows.Forms.ComboBox cboHue;
    internal System.Windows.Forms.CheckBox chkShapePattern;
    internal System.Windows.Forms.CheckBox chkColor;
    internal System.Windows.Forms.RadioButton radComponents;
    internal System.Windows.Forms.Label lblHue;
    internal System.Windows.Forms.Label lblPrimaryColor;
    internal System.Windows.Forms.RadioButton radCombination;
    internal System.Windows.Forms.ComboBox cboPrimaryColor;
    internal System.Windows.Forms.ComboBox cboSatValue;
    internal System.Windows.Forms.Label lblSatValue;
    internal System.Windows.Forms.Label lblSecondaryColor;
    internal System.Windows.Forms.ComboBox cboSecondaryColor;
    internal System.Windows.Forms.CheckBox chkSize;
    internal System.Windows.Forms.ComboBox cboSize;
        internal System.Windows.Forms.CheckBox chkRotation;
        internal System.Windows.Forms.Button butRotation;
    internal System.Windows.Forms.ComboBox cboSize1;
    [System.Diagnostics.DebuggerStepThrough()]
    private void InitializeComponent()
    {
            this.cboShapePattern = new System.Windows.Forms.ComboBox();
            this.cboHue = new System.Windows.Forms.ComboBox();
            this.chkShapePattern = new System.Windows.Forms.CheckBox();
            this.chkColor = new System.Windows.Forms.CheckBox();
            this.radComponents = new System.Windows.Forms.RadioButton();
            this.lblHue = new System.Windows.Forms.Label();
            this.lblPrimaryColor = new System.Windows.Forms.Label();
            this.radCombination = new System.Windows.Forms.RadioButton();
            this.cboPrimaryColor = new System.Windows.Forms.ComboBox();
            this.cboSatValue = new System.Windows.Forms.ComboBox();
            this.lblSatValue = new System.Windows.Forms.Label();
            this.lblSecondaryColor = new System.Windows.Forms.Label();
            this.cboSecondaryColor = new System.Windows.Forms.ComboBox();
            this.chkSize = new System.Windows.Forms.CheckBox();
            this.chkRotation = new System.Windows.Forms.CheckBox();
            this.butRotation = new System.Windows.Forms.Button();
            this.cboSize1 = new System.Windows.Forms.ComboBox();
            this.SuspendLayout();
            // 
            // cboShapePattern
            // 
            this.cboShapePattern.Location = new System.Drawing.Point(224, 11);
            this.cboShapePattern.Name = "cboShapePattern";
            this.cboShapePattern.Size = new System.Drawing.Size(121, 21);
            this.cboShapePattern.TabIndex = 24;
            this.cboShapePattern.SelectedIndexChanged += new System.EventHandler(this.cboShapePattern_SelectedIndexChanged);
            // 
            // cboHue
            // 
            this.cboHue.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
            this.cboHue.Enabled = false;
            this.cboHue.Location = new System.Drawing.Point(224, 48);
            this.cboHue.Name = "cboHue";
            this.cboHue.Size = new System.Drawing.Size(192, 21);
            this.cboHue.TabIndex = 5;
            this.cboHue.EnabledChanged += new System.EventHandler(this.cboHue_EnabledChanged);
            this.cboHue.SelectedIndexChanged += new System.EventHandler(this.cboHue_SelectedIndexChanged);
            // 
            // chkShapePattern
            // 
            this.chkShapePattern.Location = new System.Drawing.Point(8, 8);
            this.chkShapePattern.Name = "chkShapePattern";
            this.chkShapePattern.Size = new System.Drawing.Size(152, 24);
            this.chkShapePattern.TabIndex = 6;
            this.chkShapePattern.Text = "Shape/Pattern";
            this.chkShapePattern.CheckedChanged += new System.EventHandler(this.chkShapePattern_CheckedChanged);
            // 
            // chkColor
            // 
            this.chkColor.Location = new System.Drawing.Point(8, 32);
            this.chkColor.Name = "chkColor";
            this.chkColor.Size = new System.Drawing.Size(152, 24);
            this.chkColor.TabIndex = 7;
            this.chkColor.Text = "Color";
            this.chkColor.CheckedChanged += new System.EventHandler(this.chkColor_CheckedChanged);
            // 
            // radComponents
            // 
            this.radComponents.Enabled = false;
            this.radComponents.Location = new System.Drawing.Point(24, 56);
            this.radComponents.Name = "radComponents";
            this.radComponents.Size = new System.Drawing.Size(128, 24);
            this.radComponents.TabIndex = 8;
            this.radComponents.Text = "Color Components";
            this.radComponents.CheckedChanged += new System.EventHandler(this.radComponents_CheckedChanged);
            this.radComponents.EnabledChanged += new System.EventHandler(this.radComponents_EnabledChanged);
            // 
            // lblHue
            // 
            this.lblHue.Enabled = false;
            this.lblHue.Location = new System.Drawing.Point(136, 48);
            this.lblHue.Name = "lblHue";
            this.lblHue.Size = new System.Drawing.Size(88, 24);
            this.lblHue.TabIndex = 9;
            this.lblHue.Text = "Hue";
            // 
            // lblPrimaryColor
            // 
            this.lblPrimaryColor.Enabled = false;
            this.lblPrimaryColor.Location = new System.Drawing.Point(136, 104);
            this.lblPrimaryColor.Name = "lblPrimaryColor";
            this.lblPrimaryColor.Size = new System.Drawing.Size(88, 24);
            this.lblPrimaryColor.TabIndex = 12;
            this.lblPrimaryColor.Text = "Color 1";
            // 
            // radCombination
            // 
            this.radCombination.Enabled = false;
            this.radCombination.Location = new System.Drawing.Point(24, 112);
            this.radCombination.Name = "radCombination";
            this.radCombination.Size = new System.Drawing.Size(128, 24);
            this.radCombination.TabIndex = 11;
            this.radCombination.Text = "Color Combination";
            this.radCombination.CheckedChanged += new System.EventHandler(this.radCombination_CheckedChanged);
            this.radCombination.EnabledChanged += new System.EventHandler(this.radCombination_EnabledChanged);
            // 
            // cboPrimaryColor
            // 
            this.cboPrimaryColor.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
            this.cboPrimaryColor.Enabled = false;
            this.cboPrimaryColor.Location = new System.Drawing.Point(224, 104);
            this.cboPrimaryColor.Name = "cboPrimaryColor";
            this.cboPrimaryColor.Size = new System.Drawing.Size(192, 21);
            this.cboPrimaryColor.TabIndex = 10;
            this.cboPrimaryColor.EnabledChanged += new System.EventHandler(this.cboPrimaryColor_EnabledChanged);
            this.cboPrimaryColor.SelectedIndexChanged += new System.EventHandler(this.cboPrimaryColor_SelectedIndexChanged);
            // 
            // cboSatValue
            // 
            this.cboSatValue.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
            this.cboSatValue.Enabled = false;
            this.cboSatValue.Location = new System.Drawing.Point(224, 72);
            this.cboSatValue.Name = "cboSatValue";
            this.cboSatValue.Size = new System.Drawing.Size(192, 21);
            this.cboSatValue.TabIndex = 13;
            this.cboSatValue.EnabledChanged += new System.EventHandler(this.cboSatValue_EnabledChanged);
            this.cboSatValue.SelectedIndexChanged += new System.EventHandler(this.cboSatValue_selectedIndexChanged);
            // 
            // lblSatValue
            // 
            this.lblSatValue.Enabled = false;
            this.lblSatValue.Location = new System.Drawing.Point(136, 72);
            this.lblSatValue.Name = "lblSatValue";
            this.lblSatValue.Size = new System.Drawing.Size(88, 24);
            this.lblSatValue.TabIndex = 14;
            this.lblSatValue.Text = "Saturation/Value";
            // 
            // lblSecondaryColor
            // 
            this.lblSecondaryColor.Enabled = false;
            this.lblSecondaryColor.Location = new System.Drawing.Point(136, 128);
            this.lblSecondaryColor.Name = "lblSecondaryColor";
            this.lblSecondaryColor.Size = new System.Drawing.Size(88, 24);
            this.lblSecondaryColor.TabIndex = 16;
            this.lblSecondaryColor.Text = "Color 2";
            // 
            // cboSecondaryColor
            // 
            this.cboSecondaryColor.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
            this.cboSecondaryColor.Enabled = false;
            this.cboSecondaryColor.Location = new System.Drawing.Point(224, 128);
            this.cboSecondaryColor.Name = "cboSecondaryColor";
            this.cboSecondaryColor.Size = new System.Drawing.Size(192, 21);
            this.cboSecondaryColor.TabIndex = 15;
            this.cboSecondaryColor.EnabledChanged += new System.EventHandler(this.cboSecondaryColor_EnabledChanged);
            this.cboSecondaryColor.SelectedIndexChanged += new System.EventHandler(this.cboSecondaryColor_SelectedIndexChanged);
            // 
            // chkSize
            // 
            this.chkSize.Location = new System.Drawing.Point(8, 160);
            this.chkSize.Name = "chkSize";
            this.chkSize.Size = new System.Drawing.Size(152, 24);
            this.chkSize.TabIndex = 18;
            this.chkSize.Text = "Size";
            this.chkSize.CheckedChanged += new System.EventHandler(this.chkSize_CheckedChanged);
            // 
            // chkRotation
            // 
            this.chkRotation.Location = new System.Drawing.Point(8, 192);
            this.chkRotation.Name = "chkRotation";
            this.chkRotation.Size = new System.Drawing.Size(152, 24);
            this.chkRotation.TabIndex = 19;
            this.chkRotation.Text = "Rotation";
            this.chkRotation.CheckedChanged += new System.EventHandler(this.chkRotation_CheckedChanged);
            // 
            // butRotation
            // 
            this.butRotation.Enabled = false;
            this.butRotation.Location = new System.Drawing.Point(224, 192);
            this.butRotation.Name = "butRotation";
            this.butRotation.Size = new System.Drawing.Size(192, 24);
            this.butRotation.TabIndex = 21;
            this.butRotation.Text = "Properties";
            this.butRotation.Click += new System.EventHandler(this.butRotation_Click);
            // 
            // cboSize1
            // 
            this.cboSize1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
            this.cboSize1.Enabled = false;
            this.cboSize1.Location = new System.Drawing.Point(224, 160);
            this.cboSize1.Name = "cboSize1";
            this.cboSize1.Size = new System.Drawing.Size(192, 21);
            this.cboSize1.TabIndex = 23;
            this.cboSize1.SelectedIndexChanged += new System.EventHandler(this.cboSize1_selectedindexchanged);
            // 
            // PropPageForm
            // 
            this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
            this.ClientSize = new System.Drawing.Size(424, 285);
            this.Controls.Add(this.cboSize1);
            this.Controls.Add(this.butRotation);
            this.Controls.Add(this.chkRotation);
            this.Controls.Add(this.chkSize);
            this.Controls.Add(this.lblSecondaryColor);
            this.Controls.Add(this.cboSecondaryColor);
            this.Controls.Add(this.lblSatValue);
            this.Controls.Add(this.cboSatValue);
            this.Controls.Add(this.lblPrimaryColor);
            this.Controls.Add(this.radCombination);
            this.Controls.Add(this.cboPrimaryColor);
            this.Controls.Add(this.lblHue);
            this.Controls.Add(this.radComponents);
            this.Controls.Add(this.chkColor);
            this.Controls.Add(this.chkShapePattern);
            this.Controls.Add(this.cboHue);
            this.Controls.Add(this.cboShapePattern);
            this.Name = "PropPageForm";
            this.Text = "ColorPropPageForm";
            this.Load += new System.EventHandler(this.PropPageForm_Load);
            this.ResumeLayout(false);

    }

  #endregion

    public bool IsDirty
    {
      get
      {
        return m_PageIsDirty;
      }
    }

    public IComPropertyPageSite PageSite
    {
      set
      {
        m_pSite = value;
      }
    }

    public void InitControls(IMultivariateRenderer pMultiRend, IMap pMap, IGeoFeatureLayer pGeoLayer)
    {
      // copy properties from the renderer and map to the form

      m_eColorCombinationMethod = pMultiRend.ColorCombinationMethod;
      m_pShapePatternRend = pMultiRend.ShapePatternRend;
      m_pColorRend1 = pMultiRend.ColorRend1;
      m_pColorRend2 = pMultiRend.ColorRend2;
      m_pSizeRend = pMultiRend.SizeRend;

      if (m_pShapePatternRend != null)
      {
        chkShapePattern.CheckState = System.Windows.Forms.CheckState.Checked;
        cboShapePattern.Enabled = true;
      }

      if (m_eColorCombinationMethod == EColorCombinationType.enuComponents)
      {
        radComponents.Checked = true;
        radCombination.Checked = false;
        UpdateColorComb();

      }
      else
      {
                //disabled
                //radComponents.Checked = false;
                //radCombination.Checked = true;

                radComponents.Checked = true;
                radCombination.Checked = false;
        UpdateColorComb();

      }

      if (m_pColorRend1 != null)
      {
        chkColor.CheckState = System.Windows.Forms.CheckState.Checked;
        radComponents.Enabled = true;
                //disabled
                //radCombination.Enabled = true;
                radCombination.Enabled = false;

      }
      if (m_pSizeRend != null)
      {
        chkSize.CheckState = System.Windows.Forms.CheckState.Checked;
        cboSize1.Enabled = true;
      }

      IRotationRenderer pRotRend = null;
      pRotRend = pMultiRend as IRotationRenderer;
      if (pRotRend.RotationField != "")
      {
        chkRotation.CheckState = System.Windows.Forms.CheckState.Checked;
        butRotation.Enabled = true;
      }

            //ITransparencyRenderer pTransRend = null;
            //pTransRend = pMultiRend as ITransparencyRenderer;
            //if (pTransRend.TransparencyField != "")
            //{
            //    chkTransparency.CheckState = System.Windows.Forms.CheckState.Checked;
            //    butTransparency.Enabled = true;
            //}

      m_pMap = pMap;
      m_pCurrentLayer = pGeoLayer;
      m_pRend = pMultiRend as IFeatureRenderer; // we need this object to support the root transparency dialogs

      m_PageIsDirty = false;
    }

    public void InitRenderer(IMultivariateRenderer pMultiRend)
    {
      // copy properties from the form to the renderer

      if (chkShapePattern.CheckState == System.Windows.Forms.CheckState.Checked)
        pMultiRend.ShapePatternRend = m_pShapePatternRend;
      else
        pMultiRend.ShapePatternRend = null;

      if (chkColor.CheckState == System.Windows.Forms.CheckState.Checked)
      {
        pMultiRend.ColorRend1 = m_pColorRend1;
        pMultiRend.ColorRend2 = m_pColorRend2;
        pMultiRend.ColorCombinationMethod = m_eColorCombinationMethod;
      }
      else
      {
        pMultiRend.ColorRend1 = null;
        pMultiRend.ColorRend2 = null;
        pMultiRend.ColorCombinationMethod = EColorCombinationType.enuCIELabMatrix; // default (?)
      }

      if (chkSize.CheckState == System.Windows.Forms.CheckState.Checked)
        pMultiRend.SizeRend = m_pSizeRend;
      else
        pMultiRend.SizeRend = null;

      IRotationRenderer pRotRend = null;
      IRotationRenderer pFormRotRend = null;
      pRotRend = pMultiRend as IRotationRenderer;
      if (chkRotation.CheckState == System.Windows.Forms.CheckState.Checked)
      {
        pFormRotRend = m_pRend as IRotationRenderer;
        pRotRend.RotationField = pFormRotRend.RotationField;
        pRotRend.RotationType = pFormRotRend.RotationType;
      }
      else
      {
        pRotRend.RotationField = "";
        pRotRend.RotationType = esriSymbolRotationType.esriRotateSymbolArithmetic; // default (?)
      }

            //ITransparencyRenderer pTransRend = null;
            //ITransparencyRenderer pFormTransRend = null;
            //pTransRend = pMultiRend as ITransparencyRenderer;
            //if (chkTransparency.CheckState == System.Windows.Forms.CheckState.Checked)
            //{
            //    pFormTransRend = m_pRend as ITransparencyRenderer;
            //    pTransRend.TransparencyField = pFormTransRend.TransparencyField;
            //}
            //else
            //    pTransRend.TransparencyField = "";


    }

    private void PropPageForm_Load(object sender, System.EventArgs e)
    {
      // initialize form controls from data members

      IEnumLayer pGeoLayers = null;
      UID pUID = new UID();
      pUID.Value = "{E156D7E5-22AF-11D3-9F99-00C04F6BC78E}";
      pGeoLayers = m_pMap.get_Layers(pUID, true);
      pGeoLayers.Reset();
      IGeoFeatureLayer pGeoLayer = null;
      IFeatureRenderer pFeatRend = null;
      int iColor = 0;
      int iShapePattern = 0;
      int iSize = 0;

      pGeoLayer = pGeoLayers.Next() as IGeoFeatureLayer;
      string sColor1 = "";
      string sColor2 = "";
      string sShapePattern = "";
      string sSize = "";

      while (pGeoLayer != null)
      {
        // to keep things simple, filter for layers with same feat class geometry (point, line, poly) as current layer
        if ((pGeoLayer.FeatureClass.ShapeType) == (m_pCurrentLayer.FeatureClass.ShapeType))
        {
          // filter out the current layer
          if (! (pGeoLayer == m_pCurrentLayer))
          {
            pFeatRend = pGeoLayer.Renderer;

            // filter for only layers currently assigned a renderer that is valid for each renderer type (shape, color, size)
            if (RendererIsValidForType(pFeatRend, eRendererType.eColor))
            {
              iColor = iColor + 1;
              System.Array.Resize(ref m_pColorRendList, iColor + 1);
              m_pColorRendList[iColor - 1] = pFeatRend;

              cboHue.Items.Add(pGeoLayer.Name);
              cboSatValue.Items.Add(pGeoLayer.Name);
              cboPrimaryColor.Items.Add(pGeoLayer.Name);
              cboSecondaryColor.Items.Add(pGeoLayer.Name);


              if (CompareRenderers(pGeoLayer.Renderer, m_pColorRend1))
                  sColor1 = pGeoLayer.Name;
              if (CompareRenderers(pGeoLayer.Renderer, m_pColorRend2))
                  sColor2 = pGeoLayer.Name;
            }

            if (RendererIsValidForType(pFeatRend, eRendererType.eShapePattern))
            {
              iShapePattern = iShapePattern + 1;
              System.Array.Resize(ref m_pShapePatternRendList, iShapePattern + 1);
              m_pShapePatternRendList[iShapePattern - 1] = pFeatRend;

              cboShapePattern.Items.Add(pGeoLayer.Name);

                            //if (pGeoLayer.Renderer == m_pShapePatternRend)
                            //        sShapePattern = pGeoLayer.Name;
                            if (CompareRenderers(pGeoLayer.Renderer, m_pShapePatternRend))
                                sShapePattern = pGeoLayer.Name;
            }

            if (RendererIsValidForType(pFeatRend, eRendererType.eSize))
            {
              iSize = iSize + 1;
              System.Array.Resize(ref m_pSizeRendList, iSize + 1);
              m_pSizeRendList[iSize - 1] = pFeatRend;

              cboSize1.Items.Add(pGeoLayer.Name);

                            //if (pGeoLayer.Renderer == m_pSizeRend)
                            //        sSize = pGeoLayer.Name;
                            if (CompareRenderers(pGeoLayer.Renderer, m_pSizeRend))
                                sSize = pGeoLayer.Name;
            }

          }
        }
        pGeoLayer = pGeoLayers.Next() as IGeoFeatureLayer;
      }

      // select correct items in combos
      cboShapePattern.Text = sShapePattern;
      if (radComponents.Checked)
      {
        cboHue.Text = sColor1;
        cboSatValue.Text = sColor2;
      }
      else
      {
        cboPrimaryColor.Text = sColor1;
        cboSecondaryColor.Text = sColor2;
      }
      cboSize1.Text = sSize;

      // disable if there aren't any layers in the map of the correct type
      if (iShapePattern <= 0)
          cboShapePattern.Enabled = false;

      if (iColor <= 0)
      {
        if (radComponents.Checked)
        {
          cboHue.Enabled = false;
          cboSatValue.Enabled = false;
        }
        else
        {
          cboPrimaryColor.Enabled = false;
          cboSecondaryColor.Enabled = false;
        }
      }

      if (iSize <= 0)
          cboSize1.Enabled = false;
    }

    private void cboShapePattern_SelectedIndexChanged(object sender, System.EventArgs e)
    {
      m_pShapePatternRend = m_pShapePatternRendList[cboShapePattern.SelectedIndex];
      if (m_pSite != null)
          m_pSite.PageChanged();
      m_PageIsDirty = true;
    }

    private void cboHue_SelectedIndexChanged(object sender, System.EventArgs e)
    {
      m_pColorRend1 = m_pColorRendList[cboHue.SelectedIndex];
      if (m_pSite != null)
          m_pSite.PageChanged();
      m_PageIsDirty = true;
    }

    private void cboSatValue_selectedIndexChanged(object sender, System.EventArgs e)
    {
      m_pColorRend2 = m_pColorRendList[cboSatValue.SelectedIndex];
      if (m_pSite != null)
          m_pSite.PageChanged();
      m_PageIsDirty = true;
    }

    private void cboPrimaryColor_SelectedIndexChanged(object sender, System.EventArgs e)
    {
      m_pColorRend1 = m_pColorRendList[cboPrimaryColor.SelectedIndex];
      if (m_pSite != null)
          m_pSite.PageChanged();
      m_PageIsDirty = true;
    }

    private void cboSecondaryColor_SelectedIndexChanged(object sender, System.EventArgs e)
    {
      m_pColorRend2 = m_pColorRendList[cboSecondaryColor.SelectedIndex];
      if (m_pSite != null)
          m_pSite.PageChanged();
      m_PageIsDirty = true;
    }

    private void cboSize1_selectedindexchanged(object sender, System.EventArgs e)
    {
      m_pSizeRend = m_pSizeRendList[cboSize1.SelectedIndex];
      if (m_pSite != null)
          m_pSite.PageChanged();
      m_PageIsDirty = true;
    }

    private void radComponents_CheckedChanged(object sender, System.EventArgs e)
    {
      UpdateColorComb();
    }

    private void radCombination_CheckedChanged(object sender, System.EventArgs e)
    {
      UpdateColorComb();
    }

    private void UpdateColorComb()
    {

      if (radComponents.Checked)
      {
        m_eColorCombinationMethod = EColorCombinationType.enuComponents;

        cboHue.Enabled = true;
        cboSatValue.Enabled = true;
        cboPrimaryColor.Enabled = false;
        cboSecondaryColor.Enabled = false;
      }
      else
      {
        m_eColorCombinationMethod = EColorCombinationType.enuCIELabMatrix;

        cboHue.Enabled = false;
        cboSatValue.Enabled = false;
        cboPrimaryColor.Enabled = true;
        cboSecondaryColor.Enabled = true;
      }

      if (m_pSite != null)
          m_pSite.PageChanged();
      m_PageIsDirty = true;

    }

    private bool RendererIsValidForType(IFeatureRenderer pFeatRend, eRendererType eMultiRendType)
    {
      // indicates whether or not pFeatRend is valid for the eMultiRendType for the current layer
      // e.g. if pFeatRend is an IProportionalSymbolRenderer, then it's valid for eMultiRendType = eSize 

      ILegendInfo pLegendInfo = null;

      if (eMultiRendType == eRendererType.eShapePattern)
        return pFeatRend is IUniqueValueRenderer;
      else if (eMultiRendType == eRendererType.eColor)
      {
        pLegendInfo = pFeatRend as ILegendInfo;
        return (pFeatRend is IUniqueValueRenderer) | (pFeatRend is IClassBreaksRenderer & ! pLegendInfo.SymbolsAreGraduated);
      }
      else // size
      {
        pLegendInfo = pFeatRend as ILegendInfo;
        return (pFeatRend is IClassBreaksRenderer & pLegendInfo.SymbolsAreGraduated) | (pFeatRend is IProportionalSymbolRenderer);
      }


    }

    private void butRotation_Click(object sender, System.EventArgs e)
    {
      IRendererUIDialog2 pRendUIDlg2 = null;
      pRendUIDlg2 = new MarkerRotationDialog() as IRendererUIDialog2;
      pRendUIDlg2.FeatureLayer = m_pCurrentLayer;
      pRendUIDlg2.Renderer = m_pRend;
      SecondaryForm pMyForm = null;
      pMyForm = new SecondaryForm();
      pRendUIDlg2.DoModal(pMyForm.Handle.ToInt32());

    }

    private void chkShapePattern_CheckedChanged(object sender, System.EventArgs e)
    {
      cboShapePattern.Enabled = (chkShapePattern.CheckState == System.Windows.Forms.CheckState.Checked);
      if (m_pSite != null)
          m_pSite.PageChanged();
      m_PageIsDirty = true;
    }

    private void chkColor_CheckedChanged(object sender, System.EventArgs e)
    {
      radComponents.Enabled = (chkColor.CheckState == System.Windows.Forms.CheckState.Checked);
            //radCombination.Enabled = (chkColor.CheckState == System.Windows.Forms.CheckState.Checked);
            radCombination.Enabled = false;

      if (m_pSite != null)
          m_pSite.PageChanged();
      m_PageIsDirty = true;
    }

    private void chkSize_CheckedChanged(object sender, System.EventArgs e)
    {
      cboSize1.Enabled = (chkSize.CheckState == System.Windows.Forms.CheckState.Checked);
      if (m_pSite != null)
          m_pSite.PageChanged();
      m_PageIsDirty = true;
    }


    private void chkRotation_CheckedChanged(object sender, System.EventArgs e)
    {
      butRotation.Enabled = (chkRotation.CheckState == System.Windows.Forms.CheckState.Checked);
      if (m_pSite != null)
          m_pSite.PageChanged();
      m_PageIsDirty = true;
    }

        //private void chkTransparency_CheckedChanged(object sender, System.EventArgs e)
        //{
        //    butTransparency.Enabled = (chkTransparency.CheckState == System.Windows.Forms.CheckState.Checked);
        //    if (m_pSite != null)
        //            m_pSite.PageChanged();
        //    m_PageIsDirty = true;
        //}

    private void radComponents_EnabledChanged(object sender, System.EventArgs e)
    {

      cboHue.Enabled = radComponents.Enabled & radComponents.Checked;
      cboSatValue.Enabled = radComponents.Enabled & radComponents.Checked;
    }

    private void radCombination_EnabledChanged(object sender, System.EventArgs e)
    {
            //disabled
            //cboPrimaryColor.Enabled = radCombination.Enabled & radCombination.Checked;
            //cboSecondaryColor.Enabled = radCombination.Enabled & radCombination.Checked;
            cboPrimaryColor.Enabled = false;
            cboSecondaryColor.Enabled = false;
    }

    private void cboHue_EnabledChanged(object sender, System.EventArgs e)
    {

      lblHue.Enabled = cboHue.Enabled;
    }

    private void cboSatValue_EnabledChanged(object sender, System.EventArgs e)
    {

      lblSatValue.Enabled = cboSatValue.Enabled;
    }

    private void cboPrimaryColor_EnabledChanged(object sender, System.EventArgs e)
    {

      lblPrimaryColor.Enabled = cboPrimaryColor.Enabled;
    }

    private void cboSecondaryColor_EnabledChanged(object sender, System.EventArgs e)
    {

      lblSecondaryColor.Enabled = cboSecondaryColor.Enabled;
    }

    private bool CompareRenderers(IFeatureRenderer pRend, IFeatureRenderer pCheckRend)
    {

      if (pRend is IClassBreaksRenderer)
      {
        // type
        if (! (pCheckRend is IClassBreaksRenderer))
            return false;

        IClassBreaksRenderer pCBRend = null;
        pCBRend = pRend as IClassBreaksRenderer;
        IClassBreaksRenderer pCBCheckRend = null;
        pCBCheckRend = pCheckRend as IClassBreaksRenderer;

        // break count
        if (pCBRend.BreakCount != pCBCheckRend.BreakCount)
            return false;

        // field
        if (pCBRend.Field != pCBCheckRend.Field)
            return false;

      }

      return true;

    }
  }
} //end of root namespace