Ejemplo n.º 1
0
        ///<summary>ツリー図の罫線を作成する</summary>
        private string CreateRuledLine <T>(OutputStructTreeNode <T> outputStructTreeNode, int prevIndent, ref string sourceRuledLine, int indentLength = 4) where T : class
        {
            int nowIndent = outputStructTreeNode.Indent;

            // 項目がルートの場合、ツリー図の罫線はなし
            if (nowIndent == 0)
            {
                return("");
            }

            // 前回の項目と異なるノードグループ、かつ、子ノードでない場合
            if (nowIndent < prevIndent)
            {
                sourceRuledLine.Substring(0, nowIndent * indentLength - 1);
                return(sourceRuledLine + SelectBranchRuledLine(outputStructTreeNode.IsLastItemInChildren));
            }
            // 前回の項目と同じノードグループの場合
            else if (nowIndent == prevIndent)
            {
                return(outputStructTreeNode.IsLastItemInChildren ? sourceRuledLine.Substring(0, sourceRuledLine.Length - 1) + branchWithLastItemRuledLine : sourceRuledLine);
            }
            // 前回の項目の子ノードの場合
            else
            {
                // 親ノードがノードグループの最後尾の項目かどうかに応じて分岐罫線の箇所を置き換える
                if (0 < sourceRuledLine.Length)
                {
                    int    strIndex      = sourceRuledLine.Length - indentLength - 1;
                    string replaceedChar = outputStructTreeNode.ParentNode.IsLastItemInChildren ? " " : vBarRuledLine;
                    sourceRuledLine = sourceRuledLine.Remove(strIndex, 1).Insert(strIndex, replaceedChar);
                }

                // インデント文字を追加
                for (int cnt = 1; cnt < indentLength; cnt++)
                {
                    sourceRuledLine += " ";
                }
                sourceRuledLine += SelectBranchRuledLine(outputStructTreeNode.IsLastItemInChildren);
                return(sourceRuledLine);
            }
        }
Ejemplo n.º 2
0
        private List <OutputStructTreeNode <MapTreeNodeStr> > SetParentAndChildrenOnMapTreeStrs(List <OutputStructTreeNode <MapTreeNodeStr> > mapTreeNodesStrs)
        {
            for (int nodeIndex = 0; nodeIndex < mapTreeNodesStrs.Count; nodeIndex++)
            {
                var outputStructTreeNode = mapTreeNodesStrs[nodeIndex];
                if (outputStructTreeNode.Original.ParentNode != null)
                {
                    // 親ノードのMapTreeNodeStrを探索
                    string mapIDOfParentNode = outputStructTreeNode.Original.ParentNode.MapID.ToString();
                    OutputStructTreeNode <MapTreeNodeStr> parentMapTreeNodeStr =
                        mapTreeNodesStrs.Find(x => x.Original.MapID.Sentence == mapIDOfParentNode);

                    // 親ノードと子ノードを追加
                    outputStructTreeNode.ParentNode = parentMapTreeNodeStr;
                    parentMapTreeNodeStr.ChildrenNode.Add(outputStructTreeNode);
                }
                else
                {
                    outputStructTreeNode.ParentNode = null;
                }
            }
            return(mapTreeNodesStrs);
        }