public ascx_CodeStreams buildGui()
        {
            codeViewer       = this.add_SourceCodeViewer();
            codeStreams      = codeViewer.insert_Right().add_GroupBox("All Code Streams").add_TreeView();
            codeStreamViewer = codeStreams.parent().insert_Below().add_GroupBox("Selected Code Stream").add_TreeView();
            //var codeStreamViewer = topPanel.insert_Right().add_TreeView();

            Action <TreeNode, CodeStreamPath> add_CodeStreamPath = null;

            add_CodeStreamPath =
                (treeNode, codeStreamPath) => {
                var newNode = treeNode.add_Node(codeStreamPath);
                foreach (var childPath in codeStreamPath.CodeStreamPaths)
                {
                    add_CodeStreamPath(newNode, childPath);
                }
            };

            Action <TreeView, CodeStreamPath> showCodeStreamPath =
                (treeView, codeStreamPath) => {
                treeView.clear();
                add_CodeStreamPath(treeView.rootNode(), codeStreamPath);
                treeView.expandAll();
                treeView.selectFirst();
            };

            Action <ascx_SourceCodeEditor, CodeStreamPath, bool> colorCodePath =
                (codeEditor, codeStreamPath, clearMarkers) =>
            {
                if (codeEditor.getSourceCode().inValid() || codeStreamPath.Line == 0 && codeStreamPath.Column == 0)
                {
                    return;
                }
                try
                {
                    if (clearMarkers)
                    {
                        codeEditor.clearMarkers();
                        codeEditor.caret(codeStreamPath.Line, codeStreamPath.Column);
                    }
                    codeEditor.selectTextWithColor(codeStreamPath.Line,
                                                   codeStreamPath.Column,
                                                   codeStreamPath.Line_End,
                                                   codeStreamPath.Column_End);
                    codeEditor.refresh();
                }
                catch (Exception ex)
                {
                    ex.log();
                }
            };

            Action <ascx_SourceCodeEditor, List <CodeStreamPath> > colorCodePaths =
                (codeEditor, codeStreamPaths) => {
                foreach (var codeStreamPath in codeStreamPaths)
                {
                    colorCodePath(codeEditor, codeStreamPath, false);
                }
            };

            Action <TreeView, ascx_SourceCodeEditor> set_AfterSelect_SyncWithCodeEditor =
                (treeView, codeEditor) => {
                treeView.afterSelect <CodeStreamPath>(
                    (codeStreamPath) => colorCodePath(codeEditor, codeStreamPath, true));
            };


            set_AfterSelect_SyncWithCodeEditor(codeStreams, codeViewer.editor());
            set_AfterSelect_SyncWithCodeEditor(codeStreamViewer, codeViewer.editor());

            codeStreams.afterSelect <CodeStreamPath>(
                (codeStreamPath) => showCodeStreamPath(codeStreamViewer, codeStreamPath));


            codeStreams.beforeExpand <CodeStreamPath>(
                (treeNode, codeStreamPath) => {
                treeNode.add_Nodes(codeStreamPath.CodeStreamPaths, (codeStream) => codeStream.CodeStreamPaths.size() > 0);
            });


            codeViewer.onClick(
                () => {
                if (savedMethodStream.notNull())
                {
                    codeViewer.editor().clearMarkers();
                    codeStreamViewer.clear();
                    codeStreams.clear();
                    var line   = codeViewer.caret().Line + 1;
                    var column = codeViewer.caret().Column + 1;
                    CodeStreamPath lastMatch = null;
                    foreach (var codeStreamPath in savedMethodStream.CodeStreams)
                    {
                        if (codeStreamPath.Line <= line && codeStreamPath.Line_End >= line &&
                            codeStreamPath.Column <= column && codeStreamPath.Column_End >= column)
                        {
                            codeStreams.add_Node(codeStreamPath);
                            lastMatch = codeStreamPath;
                        }
                    }
                    if (lastMatch.notNull())
                    {
                        showCodeStreamPath(codeStreamViewer, lastMatch);
                        var codeStreamPaths = (from node in codeStreamViewer.allNodes()
                                               select(CodeStreamPath) node.get_Tag()).toList();
                        colorCodePaths(codeViewer.editor(), codeStreamPaths);
                    }
                    else
                    {
                        refresh_AllCodeStreams_TreeView();
                    }
                }
            });
            return(this);
        }