private void saveElement(XmlScribe scribe, Element element)
 {
     if (element.GetType() == typeof(Room))
     {
         scribe.StartElement("room");
         scribe.Attribute("id", element.ID);
         ((Room)element).Save(scribe);
         scribe.EndElement();
     }
     else if (element.GetType() == typeof(Connection))
     {
         scribe.StartElement("line");
         scribe.Attribute("id", element.ID);
         ((Connection)element).Save(scribe);
         scribe.EndElement();
     }
 }
        public void Save(XmlScribe scribe)
        {
            scribe.Attribute("name", Name);
            scribe.Attribute("description", Description);
            if (Door != null)
            {
                scribe.Attribute("door", true);
                scribe.Attribute("lockable", door.Lockable);
                scribe.Attribute("openable", door.Openable);
                scribe.Attribute("locked", door.Locked);
                scribe.Attribute("open", door.Open);
            }
            if (ConnectionColor != Color.Transparent)
            {
                scribe.Attribute("color", Colors.SaveColor(ConnectionColor));
            }


            if (Style != DEFAULT_STYLE)
            {
                switch (Style)
                {
                case ConnectionStyle.Solid:
                    scribe.Attribute("style", "solid");
                    break;

                case ConnectionStyle.Dashed:
                    scribe.Attribute("style", "dashed");
                    break;
                }
            }
            if (Flow != DEFAULT_FLOW)
            {
                switch (Flow)
                {
                case ConnectionFlow.OneWay:
                    scribe.Attribute("flow", "oneWay");
                    break;

                case ConnectionFlow.TwoWay:
                    scribe.Attribute("flow", "twoWay");
                    break;
                }
            }

            if (!string.IsNullOrEmpty(StartText))
            {
                scribe.Attribute("startText", StartText);
            }
            if (!string.IsNullOrEmpty(MidText))
            {
                scribe.Attribute("midText", MidText);
            }
            if (!string.IsNullOrEmpty(EndText))
            {
                scribe.Attribute("endText", EndText);
            }

            var index = 0;

            foreach (var vertex in VertexList)
            {
                if (vertex.Port != null)
                {
                    scribe.StartElement("dock");
                    scribe.Attribute("index", index);
                    scribe.Attribute("id", vertex.Port.Owner.ID);
                    scribe.Attribute("port", vertex.Port.ID);
                    scribe.EndElement();
                }
                else
                {
                    scribe.StartElement("point");
                    scribe.Attribute("index", index);
                    scribe.Attribute("x", vertex.Position.X);
                    scribe.Attribute("y", vertex.Position.Y);
                    scribe.EndElement();
                }
                ++index;
            }
        }