+ /// インデックスを含むノードが折りたたまれているかを判定する\r
+ /// </summary>\r
+ /// <param name="index">インデックス</param>\r
+ /// <returns>折りたたまれていれば真を返す。そうでない場合・ノードが存在しない場合は偽を返す</returns>\r
+ public bool IsHidden(int index)\r
+ {\r
+ this.collection.Rebuild();\r
+ List<FoldingItem> items = this.collection.Query(index);\r
+ if (items.Count == 0)\r
+ return false;\r
+ int hiddenCount = items.Count((item) =>{\r
+ return !item.Expand && index > item.Start && index <= item.End;\r
+ });\r
+ return hiddenCount > 0;\r
+ }\r
+\r
+ /// <summary>\r
+ /// 親ノードが隠されているかどうかを判定する\r
+ /// </summary>\r
+ /// <param name="foldingItem">判定したいノード</param>\r
+ /// <returns>隠されていれば真を返す</returns>\r
+ public bool IsParentHidden(FoldingItem foldingItem)\r
+ {\r
+ if (foldingItem == null)\r
+ return false;\r
+ this.collection.Rebuild();\r
+ List<FoldingItem> items = this.collection.Query(foldingItem.Range);\r
+ if (items.Count == 0)\r
+ return false;\r
+ int hiddenCount = items.Count((item) =>\r
+ {\r
+ //自分自身ノードか\r
+ if (foldingItem.Range.Equals(item.Range))\r
+ return false;\r
+ //ノードが親かつ隠されているかどうか\r
+ return !item.Expand && item.Start < foldingItem.Start && item.End > foldingItem.End;\r
+ });\r
+ return hiddenCount > 0;\r
+ }\r
+\r
+ /// <summary>\r
+ /// 親を持っているか判定する\r
+ /// </summary>\r
+ /// <param name="foldingItem">判定したいノード</param>\r
+ /// <returns>親を持っていれば真を返す</returns>\r
+ public bool IsHasParent(FoldingItem foldingItem)\r
+ {\r
+ if (foldingItem == null)\r
+ return false;\r
+ this.collection.Rebuild();\r
+ List<FoldingItem> items = this.collection.Query(foldingItem.Range);\r
+ if (items.Count == 0 || items.Count == 1)\r
+ return false;\r
+ int parentItemCount = items.Count((item) => item.Start < foldingItem.Start && item.End > foldingItem.End);\r
+ return parentItemCount > 0;\r
+ }\r
+\r
+ /// <summary>\r