diff -r 4f60db51a263 -r 1d366486a812 src/Tools/GraphBrowser/GraphBrowser/TreeNode.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/Tools/GraphBrowser/GraphBrowser/TreeNode.java Fri Jul 16 12:11:13 2021 +0200 @@ -0,0 +1,168 @@ +/*************************************************************************** + Title: GraphBrowser/TreeNode.java + Author: Stefan Berghofer, TU Muenchen + Options: :tabSize=4: + + This class contains methods for storing and manipulating directory + trees (e.g. collapsing / uncollapsing directory branches). +***************************************************************************/ + +package GraphBrowser; + +import java.awt.*; +import java.util.*; + + +public class TreeNode +{ + int starty,endy,number; + String name,path; + + Vector leaves=new Vector(10,10); + boolean unfold=false; + + public void insertNode(String n,String d,String p,int num,boolean u) { + if (d.length()==0) { + leaves.addElement(new TreeNode(n,p,num)); + unfold=unfold||u; + } else { + unfold=unfold||u; + String str1,str2; + if (d.indexOf('/')<0) { + str1=d;str2=""; + } else { + str1=d.substring(0,d.indexOf('/')); + str2=d.substring(d.indexOf('/')+1); + } + + Enumeration e1=leaves.elements(); + TreeNode nd=null; + + while (e1.hasMoreElements()) { + TreeNode nd2=(TreeNode)(e1.nextElement()); + if (nd2.name.equals(str1)) { + nd=nd2;break; + } + } + if (nd==null) { + nd=new TreeNode(str1,"",-1); + leaves.addElement(nd); + } + nd.insertNode(n,str2,p,num,u); + } + } + + public TreeNode(String n,String p,int num) { + name=n; + path=p; + number=num; + } + + public TreeNode(String n,String p,int num,boolean u) { + this(n,p,num); + unfold=u; + } + + public int getNumber() { return number; } + + public TreeNode lookup(int y) + { + if (y>=starty && y=0) v.addElement(new Integer(number)); + Enumeration e1=leaves.elements(); + while (e1.hasMoreElements()) + ((TreeNode)(e1.nextElement())).collapsedNodes(v); + } + + public void collapsedDirectories(Vector v) { + if (!unfold) { + Vector v2=new Vector(10,10); + v.addElement(new Directory(this,name,v2)); + collapsedNodes(v2); + } else { + Enumeration e1=leaves.elements(); + while (e1.hasMoreElements()) { + TreeNode tn=(TreeNode)(e1.nextElement()); + if (!tn.leaves.isEmpty()) + tn.collapsedDirectories(v); + } + } + } + + public Dimension draw(Graphics g,int x,int y,TreeNode t) + { + FontMetrics fm=g.getFontMetrics(g.getFont()); + int h=fm.getHeight(); + int e=(int) (h / 10) + 1; + int down_x[]={x + e, x + h - e, x + (int)(h / 2)}; + int down_y[]={y + e, y + e, y + (int)(3 * h / 4) - e}; + int right_x[]={x + e, x + (int)(3 * h / 4) - e, x + e}; + int right_y[]={y + e, y + (int)(h / 2), y + h - e}; + int dx=0; + + if (unfold) + { + g.setColor(Color.green); + g.fillPolygon(down_x,down_y,3); + g.setColor(Color.black); + g.drawString(name,x+h+4,y+fm.getAscent()); + starty=y;endy=y+h; + dx=Math.max(dx,x+h+4+fm.stringWidth(name)); + y+=h+5; + for(int i=0;i