/// <summary>
        /// Constructor. </summary>
        /// <param name="parent"> the JFrame on which this dialog will be shown. </param>
        /// <param name="ds"> the Downstream node from where the ndoe should be added. </param>
        public StateMod_Network_AddNode_JDialog(StateMod_Network_JFrame parent, HydrologyNode ds) : base(parent, "Add Node", true)
        {
            __parent = parent;
            __ds     = ds;

            setupGUI();
        }
        /// <summary>
        /// Draws the network between all the nodes.
        /// </summary>
        private void drawNetworkLines()
        {
            bool dash = false;

            float[] dashes = new float[] { 5f, 4f };
            float   offset = 0;

            double[]      x          = new double[2];
            double[]      y          = new double[2];
            HydrologyNode ds         = null;
            HydrologyNode dsRealNode = null;
            HydrologyNode holdNode   = null;
            HydrologyNode holdNode2  = null;
            HydrologyNode node       = null;
            HydrologyNode nodeTop    = __network.getMostUpstreamNode();

            GRDrawingAreaUtil.setLineWidth(__drawingArea, 1);

            for (node = nodeTop; node != null; node = StateMod_NodeNetwork.getDownstreamNode(node, StateMod_NodeNetwork.POSITION_COMPUTATIONAL))
            {
                // move ahead and skip and blank or unknown nodes (which won't
                // be drawn, anyways -- check buildNodeArray()), so that
                // connections are only between visible nodes
                if (holdNode == node)
                {
                    GRDrawingAreaUtil.setLineWidth(__drawingArea, 1);
                    return;
                }
                holdNode2 = node;
                while (node.getType() == HydrologyNode.NODE_TYPE_UNKNOWN)
                {
                    node = StateMod_NodeNetwork.getDownstreamNode(node, StateMod_NodeNetwork.POSITION_COMPUTATIONAL);
                    if (node == null || node == holdNode2)
                    {
                        GRDrawingAreaUtil.setLineWidth(__drawingArea, 1);
                        return;
                    }
                }

                ds = node.getDownstreamNode();
                if (ds == null || node.getType() == HydrologyNode.NODE_TYPE_END)
                {
                    GRDrawingAreaUtil.setLineWidth(__drawingArea, 1);
                    return;
                }

                dsRealNode = StateMod_NodeNetwork.findNextRealOrXConfluenceDownstreamNode(node);

                // if the confluence of the reach (as opposed to a trib coming
                // in) then this is the last real node in disappearing stream.
                // Use the end node for the downstream node.
                dash = false;
                if (dsRealNode == StateMod_NodeNetwork.getDownstreamNode(node, StateMod_NodeNetwork.POSITION_REACH))
                {
                    dash = true;
                }

                // move ahead and skip and blank or unknown nodes (which won't
                // be drawn, anyways -- check buildNodeArray()), so that
                // connections are only between visible nodes
                holdNode2 = ds;
                while (ds.getType() == HydrologyNode.NODE_TYPE_UNKNOWN)
                {
                    ds = ds.getDownstreamNode();
                    if (ds == null || ds == holdNode2)
                    {
                        GRDrawingAreaUtil.setLineWidth(__drawingArea, 1);
                        return;
                    }
                }

                x[0] = node.getX();
                y[0] = node.getY();
                x[1] = ds.getX();
                y[1] = ds.getY();

                GRDrawingAreaUtil.setColor(__drawingArea, GRColor.black);
                GRDrawingAreaUtil.setLineWidth(__drawingArea, 1);

                if (dash)
                {
                    __drawingArea.setFloatLineDash(dashes, offset);
                    GRDrawingAreaUtil.drawLine(__drawingArea, x, y);
                    __drawingArea.setFloatLineDash(null, (float)0);
                }
                else
                {
                    GRDrawingAreaUtil.drawLine(__drawingArea, x, y);
                }
                holdNode = node;
            }
            GRDrawingAreaUtil.setLineWidth(__drawingArea, 1);
        }