ArcObjects Library Reference  

ReductionLinkPropertyPage

About the Implementing a schematic rule and its property page Sample

[C#]

ReductionLinkPropertyPage.cs

using ESRI.ArcGIS;
using System.Runtime.InteropServices;
using ESRI.ArcGIS.ADF.CATIDs;
using Schematic = ESRI.ArcGIS.Schematic;
using ESRI.ArcGIS.Framework;
using System.Windows.Forms;
using ESRI.ArcGIS.esriSystem;
using System;
using System.Collections.Generic;
using System.Text;
using CustomRulesCS;


namespace CustomRulesPageCS
{
    [ClassInterface(ClassInterfaceType.None)]
    [Guid(ReductionLinkPropertyPage.GUID)]
    [ProgId(ReductionLinkPropertyPage.PROGID)]
    public class ReductionLinkPropertyPage : IComPropertyPage
    {
        // Register/unregister categories for this class
        #region "Component Category Registration"
        [System.Runtime.InteropServices.ComRegisterFunction()]
        public static void Register(string CLSID)
        {
            SchematicRulePropertyPages.Register(CLSID);
        }

        [System.Runtime.InteropServices.ComUnregisterFunction()]
        public static void Unregister(string CLSID)
        {
            SchematicRulePropertyPages.Unregister(CLSID);
        }
        #endregion

        public const string GUID = "9D1CD5C2-AF73-4a70-B1DD-8B092601CFE8";
        public const string PROGID = "CustomRulesPageCS.ReductionLinkPropertyPage";

        private frmReductionLink m_form = new frmReductionLink();   // the custom form
        private ReductionLinkRule m_mySchematicRule;                 // the custom rule
        private string m_title = "Reduction Links Rule C#";         // the form title
        private int m_priority = 0;                                   // the IComPage priority

        #region IComPropertyPage Membres

        public int Activate()
        {
            // Create a new RemoveElementForm but do not show it 
            if (m_form == null) m_form = new frmReductionLink();
            return (int)m_form.Handle;
        }

        public bool Applies(ISet objects)
        {
            Schematic.ISchematicRule mySchematicRule;
            mySchematicRule = FindMyRule(objects);
            return (mySchematicRule != null);
        }

        public void Apply()
        {
            try
            {
                m_mySchematicRule.Description = m_form.txtDescription.Text;
                m_mySchematicRule.ReductionLinkName = m_form.cboReduce.SelectedItem.ToString();
                m_mySchematicRule.UsePort = m_form.chkUsePort.Checked;
                m_form.IsDirty = false;
            }
            catch (System.Exception ex)
            {
                MessageBox.Show(ex.Message, "Unable to initialize rule properties", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
        }

        public void Cancel()
        {
            m_form.IsDirty = false;
        }

        public void Deactivate()
        {
            m_form.Close();
        }

        public int Height
        {
            get { return m_form.Height; }
        }

        public int get_HelpContextID(int controlID)
        {
            // TODO: return context ID if desired
            return 0;
        }

        public string HelpFile
        {
            get { return ""; }
        }

        public void Hide()
        {
            m_form.Hide();
        }

        public bool IsPageDirty
        {
            get { return m_form.IsDirty; }
        }

        public IComPropertyPageSite PageSite
        {
            set { m_form.PageSite = value; }
        }

        public int Priority
        {
            get
            {
                return m_priority;
            }
            set
            {
                m_priority = value;
            }
        }

        public void SetObjects(ISet objects)
        {
            // Search for the custom rule object instance
            m_mySchematicRule = FindMyRule(objects);
        }

        public void Show()
        {
            try
            {
                if (m_form.cboReduce.Items.Count == 0)
                {
                    Schematic.ISchematicDiagramClass diagramClass;
                    diagramClass = ((Schematic.ISchematicRule)m_mySchematicRule).SchematicDiagramClass;
                    if (diagramClass == null) return;

                    Schematic.ISchematicElementClass elementClass;
                    Schematic.IEnumSchematicElementClass enumElementClass;
                    enumElementClass = diagramClass.AssociatedSchematicElementClasses;
                    enumElementClass.Reset();
                    elementClass = enumElementClass.Next();
                    while (elementClass != null)
                    {
                        if (elementClass.SchematicElementType == Schematic.esriSchematicElementType.esriSchematicLinkType)
                            m_form.cboReduce.Items.Add(elementClass.Name);

                        elementClass = enumElementClass.Next();
                    }
                }

                m_form.cboReduce.Text = m_mySchematicRule.ReductionLinkName;
                m_form.txtDescription.Text = m_mySchematicRule.Description;
                m_form.chkUsePort.Checked = m_mySchematicRule.UsePort;
                m_form.IsDirty = false;

                m_form.Visible = true;
                m_form.lblDescription.Visible = true;
                m_form.lblReduce.Visible = true;
                m_form.txtDescription.Visible = true;
                m_form.cboReduce.Visible = true;
                m_form.chkUsePort.Visible = true;
            }
            catch (System.Exception ex)
            {
                MessageBox.Show(ex.Message, "Unable to initialize property page", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
        }

        public string Title
        {
            get
            {
                return m_title;
            }
            set
            {
                m_title = value;
            }
        }

        public int Width
        {
            get { return m_form.Width; }
        }

        #endregion

        ~ReductionLinkPropertyPage()
        {
            m_form = null;
            m_mySchematicRule = null;
        }

        // Find and return this rule from the passed in objects 
        private ReductionLinkRule FindMyRule(ESRI.ArcGIS.esriSystem.ISet Objectset)
        {
            if (Objectset.Count == 0)
                return null;

            Objectset.Reset();

            object obj;
            obj = Objectset.Next();

            while (obj != null)
            {
                if (obj is ReductionLinkRule)
                {
                    break;
                }

                obj = Objectset.Next();
            }

            return (ReductionLinkRule)obj;
        }

    }
}

[Visual Basic .NET]

ReductionLinkPropertyPage.vb

Imports ESRI.ArcGIS
Imports System.Runtime.InteropServices
Imports ESRI.ArcGIS.ADF.CATIDs
Imports Schematic = ESRI.ArcGIS.Schematic
Imports ESRI.ArcGIS.Framework
Imports System.Windows.Forms
Imports ESRI.ArcGIS.esriSystem
Imports System
Imports System.Collections.Generic
Imports System.Text
Imports CustomRulesVB

<System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.None)> _
<System.Runtime.InteropServices.Guid(ReductionLinkPropertyPage.GUID)> _
<System.Runtime.InteropServices.ProgId(ReductionLinkPropertyPage.PROGID)> _
Public Class ReductionLinkPropertyPage
    Implements ESRI.ArcGIS.Framework.IComPropertyPage

    Public Const GUID As String = "4E3C6551-8594-4c51-9B8B-075E745CC622"
    Public Const PROGID As String = "CustomRulesPageVB.ReductionLinkPropertyPage"

    ' Register/unregister categories for this class
#Region "Component Category Registration"
    <System.Runtime.InteropServices.ComRegisterFunction()> _
    Shared Sub Register(ByVal CLSID As String)
        SchematicRulePropertyPages.Register(CLSID)
    End Sub

    <System.Runtime.InteropServices.ComUnregisterFunction()> _
    Shared Sub Unregister(ByVal CLSID As String)
        SchematicRulePropertyPages.Unregister(CLSID)
    End Sub
#End Region

    Private m_Form As frmReductionLink = New frmReductionLink()        ' the custom form
    Private m_mySchematicRule As ReductionLinkRule                                ' the custom rule
    Private m_title As String = "Reduction Links Rule VBNet"                        ' the form title
    Private m_priority As Integer = 0                                                                        ' the IComPage priority


#Region "IComPropertyPage Members"
    Public Function Activate() As Integer Implements ESRI.ArcGIS.Framework.IComPropertyPage.Activate
        ' Create a new RemoveElementForm but do not show it 
        If m_Form Is Nothing Then m_Form = New frmReductionLink()
        Return m_Form.Handle.ToInt32
    End Function

    Public Function Applies(ByVal objects As ESRI.ArcGIS.esriSystem.ISet) As Boolean Implements ESRI.ArcGIS.Framework.IComPropertyPage.Applies
        Dim mySchematicRule As Schematic.ISchematicRule
        mySchematicRule = FindMyRule(objects)
        Return (mySchematicRule IsNot Nothing)
    End Function

    Public Sub Apply() Implements ESRI.ArcGIS.Framework.IComPropertyPage.Apply
        Try
            m_mySchematicRule.Description = m_Form.txtDescription.Text
            m_mySchematicRule.ReductionLinkName = m_Form.cboReduce.SelectedItem.ToString()
            m_mySchematicRule.UsePort = m_Form.chkUsePort.Checked
            m_Form.IsDirty = True
        Catch ex As Exception
            MessageBox.Show(ex.Message, "Unable to initialize rule properties", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
        End Try
    End Sub

    Public Sub Cancel() Implements ESRI.ArcGIS.Framework.IComPropertyPage.Cancel
        m_Form.IsDirty = False
    End Sub

    Public Sub Deactivate() Implements ESRI.ArcGIS.Framework.IComPropertyPage.Deactivate
        m_Form.Close()
    End Sub

    Public ReadOnly Property Height() As Integer Implements ESRI.ArcGIS.Framework.IComPropertyPage.Height
        Get
            Return m_Form.Height
        End Get
    End Property

    Public ReadOnly Property HelpContextID(ByVal controlID As Integer) As Integer Implements ESRI.ArcGIS.Framework.IComPropertyPage.HelpContextID
        Get
            ' TODO: return context ID if desired
            Return 0
        End Get
    End Property

    Public ReadOnly Property HelpFile() As String Implements ESRI.ArcGIS.Framework.IComPropertyPage.HelpFile
        Get
            Return ""
        End Get
    End Property

    Public Sub Hide() Implements ESRI.ArcGIS.Framework.IComPropertyPage.Hide
        m_Form.Hide()
    End Sub

    Public ReadOnly Property IsPageDirty() As Boolean Implements ESRI.ArcGIS.Framework.IComPropertyPage.IsPageDirty
        Get
            Return m_Form.IsDirty
        End Get
    End Property

    Public WriteOnly Property PageSite() As ESRI.ArcGIS.Framework.IComPropertyPageSite Implements ESRI.ArcGIS.Framework.IComPropertyPage.PageSite
        Set(ByVal value As ESRI.ArcGIS.Framework.IComPropertyPageSite)
            m_Form.PageSite = value
        End Set
    End Property

    Public Property Priority() As Integer Implements ESRI.ArcGIS.Framework.IComPropertyPage.Priority
        Get
            Return m_priority
        End Get
        Set(ByVal value As Integer)
            m_priority = value
        End Set
    End Property

    Public Sub SetObjects(ByVal objects As ESRI.ArcGIS.esriSystem.ISet) Implements ESRI.ArcGIS.Framework.IComPropertyPage.SetObjects
        ' Search for the custom rule object instance
        m_mySchematicRule = FindMyRule(objects)
    End Sub

    Public Sub Show() Implements ESRI.ArcGIS.Framework.IComPropertyPage.Show
        Try
            If (m_Form.cboReduce.Items.Count = 0) Then
                Dim diagramClass As Schematic.ISchematicDiagramClass
                diagramClass = m_mySchematicRule.SchematicDiagramClass
                If (diagramClass Is Nothing) Then Return

                Dim elementClass As Schematic.ISchematicElementClass
                Dim enumElementClass As Schematic.IEnumSchematicElementClass
                enumElementClass = diagramClass.AssociatedSchematicElementClasses
                enumElementClass.Reset()
                elementClass = enumElementClass.Next()
                While (elementClass IsNot Nothing)
                    If (elementClass.SchematicElementType = Schematic.esriSchematicElementType.esriSchematicLinkType) Then
                        m_Form.cboReduce.Items.Add(elementClass.Name)
                    End If

                    elementClass = enumElementClass.Next()
                End While
            End If

            m_Form.cboReduce.Text = m_mySchematicRule.ReductionLinkName
            m_Form.txtDescription.Text = m_mySchematicRule.Description
            m_Form.chkUsePort.Checked = m_mySchematicRule.UsePort
            m_Form.IsDirty = False

            m_Form.Visible = True
            m_Form.lblDescription.Visible = True
            m_Form.lblReduce.Visible = True
            m_Form.txtDescription.Visible = True
            m_Form.cboReduce.Visible = True
            m_Form.chkUsePort.Visible = True
        Catch ex As Exception
            MessageBox.Show(ex.Message, "Unable to initialize property page", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
        End Try
    End Sub

    Public Property Title() As String Implements ESRI.ArcGIS.Framework.IComPropertyPage.Title
        Get
            Return m_title
        End Get
        Set(ByVal value As String)
            m_title = value
        End Set
    End Property

    Public ReadOnly Property Width() As Integer Implements ESRI.ArcGIS.Framework.IComPropertyPage.Width
        Get
            Return m_Form.Width
        End Get
    End Property
#End Region

    Protected Overrides Sub Finalize()
        m_Form = Nothing
        m_mySchematicRule = Nothing
        MyBase.Finalize()
    End Sub

    ' Find and return this rule from the passed in objects 
    Private Function FindMyRule(ByVal Objectset As ESRI.ArcGIS.esriSystem.ISet) As ReductionLinkRule
        If (Objectset.Count = 0) Then Return Nothing

        Objectset.Reset()

        Dim obj As Object
        obj = Objectset.Next()

        While (obj IsNot Nothing)
            If (TypeOf (obj) Is ReductionLinkRule) Then Exit While

            obj = Objectset.Next()
        End While

        Return CType(obj, ReductionLinkRule)
    End Function
End Class