internal void InitializeControl(IntersectForm parent, int dirNum)
        {
            // Default settings for direction radio buttons.
            TurnRadioOff(clockwiseRadioButton);
            TurnRadioOff(counterClockwiseRadioButton);

            // Default settings for offset radio buttons (not checked, not enabled)
            TurnRadioOff(leftRadioButton);
            TurnRadioOff(rightRadioButton);

            // Clear the button that lets the displayed offset value be set as default
            setDefaultOffsetButton.Enabled = false;

            // If we've got a default offset, display it (and set the
            // appropriate radio button)
            string value = GlobalUserSetting.Read(DEFAULT_OFFSET_KEY);
            if (value.Length > 0)
            {
                m_DefaultOffset = new Distance(value);
                if (m_DefaultOffset.IsDefined)
                    m_DefaultOffset.SetFixed();
                else
                    m_DefaultOffset = null;
            }

            // Initialize combo box with a list of all line entity types
            // for the currently active theme.
            m_LineType = lineTypeComboBox.Load(SpatialType.Line);

            if (m_DefaultOffset!=null)
            {
                lineTypeComboBox.SelectEntity(null);
                lineTypeGroupBox.Enabled = false;
                m_LineType = null;
            }

            if (parent is IntersectDirectionAndLineForm)
            {
                // For direction-line intersections, the default is NOT
                // to add a line, so if we're not doing an update, make
                // sure the line type is undefined.

                if (parent.GetUpdateOp()==null)
                {
                    lineTypeComboBox.SelectEntity(null);
                    //lineTypeGroupBox.Enabled = false;
                    m_LineType = null;
                }
            }

            // If we are updating a feature that was previously created (or recalling
            // a previous edit), load the original info. For direction-direction intersections,
            // we need to know which page this is, to determine whether we
            // should display info for the 1st or 2nd direction.

            IntersectOperation op = parent.GetUpdateOp();
            if (op == null)
                op = parent.GetRecall();

            if (!ShowUpdate(op, (byte)dirNum))
            {
                // Display default offset (if there is one). Setting the text will cause
                // a call to OnChangeOffset, which will define m_Offset & m_IsRight
                if (m_DefaultOffset!=null)
                    offsetTextBox.Text = m_DefaultOffset.Format();
            }

            // Go to the first text box
            fromPointTextBox.Focus();
        }
        /// <summary>
        /// Parses an explicitly entered offset distance. 
        /// </summary>
        /// <returns></returns>
        bool OnOffsetDistance()
        {
            // Null out the current offset.
            m_OffsetDistance = null;

            // Get the entered string.
            string str = offsetTextBox.Text.Trim();
            if (str.Length==0)
                return false;

            // If all we have is a "-", disable the ability to specify
            // offset right & return.
            if (str[0] == '-')
            {
                TurnRadioOff(rightRadioButton);
                leftRadioButton.Checked = true;
                if (str.Length==1)
                    return false;
            }

            // Parse the distance.
            Distance dist = new Distance(str);
            if (!dist.IsDefined)
            {
                MessageBox.Show("Offset distance contains extraneous characters.");
                return false;
            }

            // Save the entered distance (in the current data entry units if
            // units were not specified). Make it a fixed distance.
            m_OffsetDistance = dist;
            m_OffsetDistance.SetFixed();

            // If we have signed offset, it HAS to be an offset to the
            // left. Otherwise make sure we preserve the directional sense.
            // which may have been previously defined.
            if (m_OffsetDistance.SetPositive()) // i.e. the offset had to be
                m_IsRight = false;              // made positive => offset left
            else
                m_IsRight = true;

            // If the offset is signed, make it an offset left and
            // disable the ability to make it an offset right.
            if (m_IsRight)
                SetOffsetRight();
            else
                SetOffsetLeft();

            return true;
        }
        private void setDefaultOffsetButton_Click(object sender, EventArgs e)
        {
            // The following message should have been trapped already,
            // displayed only to reveal potential bug
            if (m_OffsetPoint!=null)
            {
                MessageBox.Show("Can't set default if offset is defined via a point feature.");
                return;
            }

            // Handle case where no offset is defined (remove from registry)
            if (m_OffsetDistance==null || Math.Abs(m_OffsetDistance.Meters) < Constants.TINY)
            {
                GlobalUserSetting.Write(DEFAULT_OFFSET_KEY, String.Empty);
                return;
            }

            // Handle a defined value, prepending with a "-" character
            // if the offset is to the left
            string value = m_OffsetDistance.Format();
            if (!m_IsRight)
                value = "-" + value;
            GlobalUserSetting.Write(DEFAULT_OFFSET_KEY, value);

            // Remember the new default (it's different from m_OffsetDistance if
            // it's an offset to the left)
            m_DefaultOffset = new Distance(value);
            m_DefaultOffset.SetFixed();

            // Disable the button (the user has to change it in order to re-enable)
            setDefaultOffsetButton.Enabled = false;
        }