コード例 #1
0
        /// <summary>
        /// headerを検索
        /// </summary>
        /// <param name="folder"></param>
        /// <param name="header"></param>
        /// <returns></returns>
        private BookmarkThread Search(BookmarkFolder folder, ThreadHeader header)
        {
            foreach (BookmarkEntry entry in folder.Children)
            {
                if (entry.IsLeaf)
                {
                    BookmarkThread item  = (BookmarkThread)entry;
                    bool           equal = item.HeaderInfo.Equals(header);

                    if (equal)
                    {
                        return(item);
                    }
                }
                else
                {
                    BookmarkThread r = Search((BookmarkFolder)entry, header);
                    if (r != null)
                    {
                        return(r);
                    }
                }
            }
            return(null);
        }
コード例 #2
0
        /// <summary>
        /// このフォルダを複製
        /// </summary>
        /// <returns></returns>
        public override BookmarkEntry Clone()
        {
            BookmarkFolder clone = new BookmarkFolder(name);

            clone.Children.AddRange(children);

            return(clone);
        }
コード例 #3
0
        private void LoadRecursive(XmlNode node, BookmarkFolder folder)
        {
            // フォルダを作成
            folder.Name     = node.Attributes["Name"].Value;
            folder.Expanded = Boolean.Parse(node.Attributes["Expanded"].Value);

            XmlAttribute id = node.Attributes["ID"];

            if (id != null)
            {
                BookmarkEntry.SetEntryId(folder, Int32.Parse(id.Value));
            }

            // 子ノードを検索
            foreach (XmlNode subNode in node.SelectNodes("Children/Folder"))
            {
                BookmarkFolder subFolder = new BookmarkFolder();
                folder.Children.Add(subFolder);
                LoadRecursive(subNode, subFolder);
            }

            // お気に入りコレクションを検索
            foreach (XmlNode child in node.SelectNodes("Children/Item"))
            {
                string       url    = child.Attributes["URL"].Value;
                ThreadHeader header = URLParser.ParseThread(url);

                if (header != null)
                {
                    //XmlAttribute idattr = child.Attributes["ID"];
                    BookmarkEntry entry = null;

                    header.Subject = child.InnerText;

                    //if (idattr != null)
                    //	entry = new BookmarkThread(header, Int32.Parse(idattr.Value));
                    //else
                    entry = new BookmarkThread(header);

                    folder.Children.Add(entry);
                }
            }
        }
コード例 #4
0
        /// <summary>
        /// このフォルダのお気に入りを取得
        /// </summary>
        /// <param name="includeSubChildren">サブフォルダも含める場合はtrue</param>
        /// <returns></returns>
        public List <ThreadHeader> GetBookmarks(bool includeSubChildren)
        {
            List <ThreadHeader> items =
                new List <ThreadHeader>();

            foreach (BookmarkEntry entry in children)
            {
                if (entry.IsLeaf)
                {
                    BookmarkThread thread = (BookmarkThread)entry;
                    items.Add(thread.HeaderInfo);
                }
                else if (includeSubChildren)
                {
                    BookmarkFolder folder = (BookmarkFolder)entry;
                    items.AddRange(folder.GetBookmarks(includeSubChildren));
                }
            }
            return(items);
        }
コード例 #5
0
        /// <summary>
        /// 再起検索を利用してサブフォルダとお気に入りの要素をelementに追加
        /// </summary>
        /// <param name="doc"></param>
        /// <param name="parent"></param>
        /// <param name="folders"></param>
        private void AppendRecursive(XmlDocument doc, XmlElement parent, BookmarkFolder folder)
        {
            // フォルダ名の属性を作成
            XmlAttribute attr1 = doc.CreateAttribute("Name");

            attr1.Value = folder.Name;

            // 識別ID属性を作成
            XmlAttribute attr2 = doc.CreateAttribute("ID");

            attr2.Value = folder.Id.ToString();

            // 展開されているかどうかの属性を作成
            XmlAttribute attr3 = doc.CreateAttribute("Expanded");

            attr3.Value = folder.Expanded.ToString();

            // サブフォルダコレクションノードを作成
            XmlElement children = doc.CreateElement("Children");

            foreach (BookmarkEntry entry in folder.Children)
            {
                // お気に入りの場合
                if (entry.IsLeaf)
                {
                    BookmarkThread item = (BookmarkThread)entry;

                    // URL属性を作成
                    XmlAttribute url = doc.CreateAttribute("URL");
                    url.Value = item.HeaderInfo.Url;

                    //XmlAttribute id = doc.CreateAttribute("ID");
                    //id.Value = entry.Id.ToString();

                    // お気に入りノードを作成
                    XmlElement node = doc.CreateElement("Item");
                    node.Attributes.Append(url);
                    //node.Attributes.Append(id);

                    // beta18
                    //node.InnerText = item.HeaderInfo.Subject;
                    node.InnerText = item.Name;

                    // お気に入りコレクションノードに追加
                    children.AppendChild(node);
                }
                // フォルダであれば潜る
                else
                {
                    AppendRecursive(doc, children, (BookmarkFolder)entry);
                }
            }

            // 最後にフォルダノードの作成
            XmlElement folderNode = doc.CreateElement("Folder");

            folderNode.Attributes.Append(attr1);
            folderNode.Attributes.Append(attr2);
            folderNode.Attributes.Append(attr3);
            folderNode.AppendChild(children);

            // 親ノードに追加
            parent.AppendChild(folderNode);
        }