コード例 #1
0
 public void ShowTree()
 {
     //Желательно строить в отдельном потоке а потом разом выводить. Незабуть про синхронизацию.
     //Пока можно посто в лоб.
     try
     {
         PascalABCCompiler.SemanticTree.IProgramNode Root = VisualEnvironmentCompiler.StandartCompiler.SemanticTree;
         treeView.Nodes.Clear();                
         // связываем Visitor и treeView.Nodes
         Visitor = new SematicTreeVisitor(treeView.Nodes);
         Visitor.CreateMyDictionaries();
         Visitor.setTreeView(treeView);
         // собственно проходим по дереву от корня                
         Root.visit(Visitor);
         //Visitor.visit(Root, treeView.Nodes);             
         //Visitor.visit(Root);
         // устанавливаем обратные связи
         Visitor.makeUpRows(treeView);                
         
         // по умолчанию выбранным является Nodes[0]
         treeView.SelectedNode = treeView.Nodes[0];
         //treeView.SelectedNode.BackColor = Color.Chocolate;
         //treeView.Invalidate();
         treeView.Invalidate();
         treeView.Refresh();
         treeView.Update();
         
     }
     catch (Exception e)
     {
         VisualEnvironmentCompiler.ExecuteAction(VisualEnvironmentCompilerAction.AddTextToCompilerMessages, "SemanticVisualisator Exception: " + e.ToString());
     }
 }        
コード例 #2
0
ファイル: Visitor.cs プロジェクト: lisiynos/pascalabcnet
        // для одного node из ICollection
        public void prepare_node_in_collection(ISemanticNode subnode, string node_name, myTreeNode tn_parent, bool is_leaf)
        {
            myTreeNode t;
            if (treeView.SelectedNode == null)
                t = null;
            else
                if (treeView.SelectedNode.Tag == null)
                    t = null;
                else
                    t = treeView.SelectedNode as myTreeNode;

            if (subnode != null)
            {
                myTreeNode tn = new myTreeNode();

                tn.Text = node_name + "   :   " + subnode.GetType().Name;
                tn.Tag = subnode;
                SematicTreeVisitor vs = new SematicTreeVisitor(tn.Nodes);

                tn_parent.Nodes.Add(tn);

                try
                {
                    if (!table_subnodes.ContainsKey(subnode))
                        table_subnodes.Add(subnode, tn);
                }
                catch (System.Exception e)
                {
                    MessageBox.Show("Exception was \n" + e.ToString());
                }

                //treeView.Invalidate();
                //(tn as myTreeNode).is_leaf = is_leaf;
            }
        }
コード例 #3
0
ファイル: Visitor.cs プロジェクト: lisiynos/pascalabcnet
        //--------------------------------------------------------------------------------------------
        //--------------------------------------------------------------------------------------------
        //--------------------------------------------------------------------------------------------
        //--------------------------------------------------------------------------------------------
        //--------------------------------------------------------------------------------------------


        // для обычного node - потомка ISemanticNode
        public void prepare_node(ISemanticNode subnode, string node_name)
        {
            myTreeNode t;
            if (treeView.SelectedNode == null)
                t = null;
            else
                if (treeView.SelectedNode.Tag == null)
                    t = null;
                else
                    t = treeView.SelectedNode as myTreeNode;


            if (subnode != null)
            {
                myTreeNode tn = new myTreeNode();

                tn.Text = node_name + "   :   " + subnode.GetType().Name;
                tn.Tag = subnode;
                SematicTreeVisitor vs = new SematicTreeVisitor(tn.Nodes);
                
                if (t != null)
                    t.Nodes.Add(tn);
                else
                    nodes.Add(tn);

                try
                {
                    if (!table_subnodes.ContainsKey(subnode))
                        table_subnodes.Add(subnode, tn);
                }
                catch (System.Exception e)
                {
                    MessageBox.Show("Exception was \n" + e.ToString());
                }
            }
        }