Exemplo n.º 1
0
        /// <summary>
        /// 获取topic中的markers
        /// </summary>
        /// <param name="topic">topic's XElement</param>
        /// <returns>markers列表</returns>
        public List <XMindMarker> GetTopicMarkers(XElement topic)
        {
            // Get topic marker-refs tag:
            XElement marker_refs = topic.Elements().Where(w => w.Name.ToString().EndsWith("marker-refs")).FirstOrDefault();

            if (marker_refs == null)
            {
                return(new List <XMindMarker>());
            }

            // Get topic marker_ref tag:
            List <XElement> marker_ref_elements = marker_refs.Elements().Where(w => w.Name.ToString().EndsWith("marker-ref")).ToList();

            if (marker_ref_elements.Count <= 0)
            {
                return(new List <XMindMarker>());
            }

            List <XMindMarker> markers = new List <XMindMarker>();

            foreach (XElement marker_ref in marker_ref_elements)
            {
                XAttribute marker_id = marker_ref.Attributes().Where(w => w.Name == "marker-id").FirstOrDefault();
                if (marker_id == null)
                {
                    return(new List <XMindMarker>());
                }

                // 获取特性对应XMindMarkers:
                FieldInfo[] fieldinfo = typeof(XMindMarker).GetFields();
                foreach (var fi in fieldinfo)
                {
                    var att = Attribute.GetCustomAttribute(fi, typeof(DescriptionAttribute), false);
                    if (att != null)
                    {
                        DescriptionAttribute des = (DescriptionAttribute)att;
                        if (des.Description == marker_id.Value)
                        {
                            XMindMarker marker = (XMindMarker)Enum.Parse(typeof(XMindMarker), fi.Name);
                            markers.Add(marker);
                        }
                    }
                }
            }
            return(markers);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Add a marker to an existing topic. Refer XMindMarkers enum for available markers.
        /// </summary>
        /// <param name="topicId">Id of topic to add marker to</param>
        /// <param name="marker">Marker type. Refer XMindMarkers enum</param>
        public void AddMarker(string topicId, XMindMarker marker)
        {
            XElement topic = GetTopic(topicId);

            if (topic == null)
            {
                throw new InvalidOperationException("Topic not found!");
            }

            // Get topic marker-refs tag, if not exist create:
            XElement marker_refs = topic.Descendants().Where(w => w.Name.ToString().EndsWith("marker-refs")).FirstOrDefault();

            if (marker_refs == null)
            {
                marker_refs = new XElement(_defaultContentNS + "marker-refs");
                topic.Add(marker_refs);
            }

            // Get topic marker_ref tag, if not exist create:
            XElement marker_ref = marker_refs.Descendants().Where(w => w.Name.ToString().EndsWith("marker-ref")).FirstOrDefault();

            if (marker_ref == null)
            {
                marker_ref = new XElement(_defaultContentNS + "marker-ref");
                marker_refs.Add(marker_ref);
            }

            XAttribute att = marker_ref.Attributes().Where(w => w.Name == "marker-id").FirstOrDefault();

            if (att != null)
            {
                marker_ref.Attributes("marker-id").Remove();
            }

            var enumField = marker.GetType().GetFields().Where(field => field.Name == marker.ToString()).FirstOrDefault();

            DescriptionAttribute[] a = (DescriptionAttribute[])enumField.GetCustomAttributes(typeof(DescriptionAttribute), false);

            marker_ref.Add(new XAttribute("marker-id", a[0].Description));
        }