home *** CD-ROM | disk | FTP | other *** search
/ CD Actual Thematic 7: Programming / CDAT7.iso / Share / Java / JDesignerPro / Jdp3_0.exe / data1.cab / Program_Files / JDPMethodExplorer.class (.txt) < prev    next >
Encoding:
Java Class File  |  1999-04-09  |  21.9 KB  |  1,761 lines

  1. import java.awt.Color;
  2. import java.awt.Component;
  3. import java.awt.Container;
  4. import java.awt.Dimension;
  5. import java.awt.Event;
  6. import java.awt.Font;
  7. import java.awt.FontMetrics;
  8. import java.awt.Graphics;
  9. import java.awt.Image;
  10. import java.awt.Panel;
  11. import java.awt.Point;
  12. import java.awt.Rectangle;
  13. import java.awt.Scrollbar;
  14. import java.awt.image.ImageObserver;
  15. import java.util.Date;
  16. import java.util.StringTokenizer;
  17. import java.util.Vector;
  18.  
  19. public class JDPMethodExplorer extends Panel implements Runnable {
  20.    JDPUser user;
  21.    // $FF: renamed from: sp JDPSourceParser
  22.    JDPSourceParser field_0;
  23.    Panel targetPanel;
  24.    Scrollbar scrollEast;
  25.    Scrollbar scrollSouth;
  26.    JDPPopupMenu popupMenu;
  27.    JDPMethodNode nodeRoot;
  28.    JDPMethodTree methodTree;
  29.    Rectangle Bounds;
  30.    Rectangle widthRect;
  31.    Image offscreen;
  32.    Rectangle offscreensize;
  33.    // $FF: renamed from: gr java.awt.Graphics
  34.    Graphics field_1;
  35.    Image iconImage;
  36.    Image iconImages;
  37.    Image largeIconImages;
  38.    Graphics grI;
  39.    JDPImageLoader imageLoader;
  40.    static final int LEFT = 0;
  41.    static final int RIGHT = 1;
  42.    static final int ABOVE = 2;
  43.    static final int BELOW = 3;
  44.    int[] widths;
  45.    Font lastFont;
  46.    // $FF: renamed from: fm java.awt.FontMetrics
  47.    FontMetrics field_2;
  48.    Font prevFont;
  49.    Color prevForeground;
  50.    Color prevBackground;
  51.    Vector allNodes;
  52.    Vector displayedNodes;
  53.    boolean displayName = true;
  54.    boolean displayText = true;
  55.    boolean displayGlobals = true;
  56.    int maxTextWidth;
  57.    int nodeSpaceWidth = 150;
  58.    int nodeSpaceHeight = 15;
  59.    int maxWidth;
  60.    int maxHeight;
  61.    int minimumWidth = 140;
  62.    int minimumHeight = 200;
  63.    int xOffset;
  64.    int yOffset;
  65.    int currheight;
  66.    boolean scrollEastDisabled;
  67.    boolean scrollSouthDisabled;
  68.    Event thisEvent;
  69.    boolean nothingChanged;
  70.    boolean threeDBorder = true;
  71.    int scrollSideways;
  72.    int scrollDown;
  73.    JDPMethodNode makeVisibleNode;
  74.    Color drawColor;
  75.    Color textColor;
  76.    Color textHighlightText;
  77.    Color textHighlight;
  78.    Color controlColor;
  79.    Color back;
  80.    boolean dropEvent;
  81.    boolean loadingStatus;
  82.    String loadSource;
  83.    long lastEventTime;
  84.  
  85.    int calcTextWidth(String var1) {
  86.       int var2 = this.user.u.StringWidth(this.field_1, var1.trim());
  87.       return var2 < this.maxTextWidth ? var2 : this.maxTextWidth;
  88.    }
  89.  
  90.    void drawExpandRect(JDPMethodNode var1, int var2, int var3, int var4) {
  91.       if (var1.leftNodes != null && var1.leftNodes.size() > 0 && var4 == 0 || this.hasRightNodes(var1) && var4 == 1) {
  92.          this.field_1.setColor(Color.white);
  93.          this.field_1.fillRect(var2 - 10, var3 - 12, 8, 8);
  94.          this.field_1.setColor(this.textColor);
  95.          this.field_1.drawRect(var2 - 10, var3 - 12, 8, 8);
  96.          this.field_1.setColor(Color.black);
  97.          if (!var1.expanded) {
  98.             this.field_1.drawLine(var2 - 6, var3 - 10, var2 - 6, var3 - 6);
  99.          }
  100.  
  101.          this.field_1.drawLine(var2 - 8, var3 - 8, var2 - 4, var3 - 8);
  102.          var1.expandRect = new Rectangle(var2 - 10, var3 - 12, 8, 8);
  103.       } else {
  104.          var1.expandRect = null;
  105.       }
  106.    }
  107.  
  108.    int[] calcTotalHeight(JDPMethodNode var1, int var2) {
  109.       if (var2 == 1) {
  110.          if (var1.rightNodes != null) {
  111.             int[] var4 = new int[var1.rightNodes.size()];
  112.  
  113.             for(int var5 = 0; var5 < var1.rightNodes.size(); ++var5) {
  114.                JDPMethodNode var3 = (JDPMethodNode)var1.rightNodes.elementAt(var5);
  115.                if (var3.item == null || var3.item.type != 3 || this.displayGlobals) {
  116.                   var4[var5] = this.calcTextHeight(this.getDescription(var3)) + this.nodeSpaceHeight;
  117.                   if (var4[var5] < 30 + this.nodeSpaceHeight) {
  118.                      var4[var5] = 30 + this.nodeSpaceHeight;
  119.                   }
  120.                }
  121.             }
  122.  
  123.             return var4;
  124.          }
  125.       } else if (var2 == 0 && var1.leftNodes != null) {
  126.          int[] var7 = new int[var1.leftNodes.size()];
  127.  
  128.          for(int var8 = 0; var8 < var1.leftNodes.size(); ++var8) {
  129.             JDPMethodNode var6 = (JDPMethodNode)var1.leftNodes.elementAt(var8);
  130.             var7[var8] = this.calcTextHeight(this.getDescription(var6)) + this.nodeSpaceHeight;
  131.             if (var7[var8] < 30 + this.nodeSpaceHeight) {
  132.                var7[var8] = 30 + this.nodeSpaceHeight;
  133.             }
  134.          }
  135.  
  136.          return var7;
  137.       }
  138.  
  139.       return null;
  140.    }
  141.  
  142.    public void setNodeVerticalGap(int var1) {
  143.       this.nodeSpaceHeight = var1;
  144.       this.reDraw();
  145.    }
  146.  
  147.    public int getNodeVerticalGap() {
  148.       return this.nodeSpaceHeight;
  149.    }
  150.  
  151.    JDPMethodNode getNodeVisible(JDPMethodNode var1) {
  152.       for(int var2 = 0; var2 < this.displayedNodes.size(); ++var2) {
  153.          JDPMethodNode var3 = (JDPMethodNode)this.displayedNodes.elementAt(var2);
  154.          if (var3.equals(var1)) {
  155.             return var3;
  156.          }
  157.       }
  158.  
  159.       return null;
  160.    }
  161.  
  162.    void loadPopupMenu(Event var1) {
  163.       if (!this.popupMenu.isShowing()) {
  164.          this.popupMenu.clear();
  165.          this.popupMenu.setBackground(this.controlColor);
  166.          if (this.getShowGlobals()) {
  167.             this.popupMenu.addEntry("Hide Global Variables");
  168.          } else {
  169.             this.popupMenu.addEntry("Display Global Variables");
  170.          }
  171.  
  172.          if (this.getShowNames()) {
  173.             this.popupMenu.addEntry("Hide Names");
  174.          } else {
  175.             this.popupMenu.addEntry("Display Names");
  176.          }
  177.  
  178.          if (this.getShowText()) {
  179.             this.popupMenu.addEntry("Hide Descriptions");
  180.          } else {
  181.             this.popupMenu.addEntry("Display Descriptions");
  182.          }
  183.  
  184.          String[] var2 = new String[]{"Set horizontal spacing", "100 pixels"};
  185.          this.popupMenu.addEntry(var2);
  186.          var2[1] = "125 pixels";
  187.          this.popupMenu.addEntry(var2);
  188.          var2[1] = "150 pixels";
  189.          this.popupMenu.addEntry(var2);
  190.          var2[1] = "200 pixels";
  191.          this.popupMenu.addEntry(var2);
  192.          var2[1] = "250 pixels";
  193.          this.popupMenu.addEntry(var2);
  194.          var2[1] = "300 pixels";
  195.          this.popupMenu.addEntry(var2);
  196.          var2[0] = "Set vertical spacing";
  197.          var2[1] = "15 pixels";
  198.          this.popupMenu.addEntry(var2);
  199.          var2[1] = "30 pixels";
  200.          this.popupMenu.addEntry(var2);
  201.          var2[1] = "45 pixels";
  202.          this.popupMenu.addEntry(var2);
  203.          var2[1] = "60 pixels";
  204.          this.popupMenu.addEntry(var2);
  205.          var2[0] = "Set minimum height";
  206.          var2[1] = "150 pixels";
  207.          this.popupMenu.addEntry(var2);
  208.          var2[1] = "200 pixels";
  209.          this.popupMenu.addEntry(var2);
  210.          var2[1] = "250 pixels";
  211.          this.popupMenu.addEntry(var2);
  212.          var2[1] = "300 pixels";
  213.          this.popupMenu.addEntry(var2);
  214.          var2[1] = "350 pixels";
  215.          this.popupMenu.addEntry(var2);
  216.          var2[1] = "400 pixels";
  217.          this.popupMenu.addEntry(var2);
  218.          var2[1] = "450 pixels";
  219.          this.popupMenu.addEntry(var2);
  220.          var2[1] = "500 pixels";
  221.          this.popupMenu.addEntry(var2);
  222.          this.popupMenu.setForeground(((Component)this).getParent().getForeground());
  223.          this.popupMenu.display(var1.x, var1.y);
  224.       }
  225.    }
  226.  
  227.    public JDPMethodExplorer(JDPUser var1) {
  228.       this.createExplorer(var1, (Panel)null);
  229.    }
  230.  
  231.    public boolean makeVisible(JDPSourceItem var1) {
  232.       if (var1 == null) {
  233.          return false;
  234.       } else {
  235.          JDPMethodNode var2 = this.getNode(var1);
  236.          if (var2 != null) {
  237.             this.makeVisibleNode = var2;
  238.             this.reDraw();
  239.             return true;
  240.          } else {
  241.             return false;
  242.          }
  243.       }
  244.    }
  245.  
  246.    public void setMinimumHeight(int var1) {
  247.       this.minimumHeight = var1;
  248.    }
  249.  
  250.    public int getMinimumHeight() {
  251.       return this.minimumHeight;
  252.    }
  253.  
  254.    public Dimension preferredSize() {
  255.       Dimension var1 = new Dimension(this.minimumWidth, this.minimumHeight);
  256.       return var1;
  257.    }
  258.  
  259.    public void layout() {
  260.       ((Component)this).repaint();
  261.    }
  262.  
  263.    void handlePopupMenu() {
  264.       String var1 = this.popupMenu.getSelectedMenu(0);
  265.       if (var1.equals("Hide Global Variables")) {
  266.          this.setShowGlobals(false);
  267.       } else if (var1.equals("Display Global Variables")) {
  268.          this.setShowGlobals(true);
  269.       } else if (var1.equals("Hide Names")) {
  270.          this.setShowNames(false);
  271.       } else if (var1.equals("Display Names")) {
  272.          this.setShowNames(true);
  273.       } else if (var1.equals("Hide Descriptions")) {
  274.          this.setShowText(false);
  275.       } else if (var1.equals("Display Descriptions")) {
  276.          this.setShowText(true);
  277.       } else if (var1.equals("Set horizontal spacing")) {
  278.          int var5 = Integer.parseInt(this.popupMenu.getSelectedMenu(1).substring(0, 3));
  279.          this.setNodeHorizontalGap(var5);
  280.       } else if (var1.equals("Set vertical spacing")) {
  281.          int var4 = Integer.parseInt(this.popupMenu.getSelectedMenu(1).substring(0, 2));
  282.          this.setNodeVerticalGap(var4);
  283.       } else if (var1.equals("Set minimum height")) {
  284.          int var2 = Integer.parseInt(this.popupMenu.getSelectedMenu(1).substring(0, 3));
  285.          this.setMinimumHeight(var2);
  286.          Container var3 = ((Component)this).getParent();
  287.          if (var3 != null) {
  288.             var3 = ((Component)var3).getParent();
  289.          }
  290.  
  291.          if (var3 != null) {
  292.             var3 = ((Component)var3).getParent();
  293.          }
  294.  
  295.          if (var3 != null) {
  296.             var3 = ((Component)var3).getParent();
  297.          }
  298.  
  299.          if (var3 != null) {
  300.             var3.layout();
  301.             ((Component)var3).paintAll(((Component)var3).getGraphics());
  302.          }
  303.  
  304.       }
  305.    }
  306.  
  307.    public void refreshAllRelations(JDPSourceItem var1) {
  308.       for(int var3 = 0; var3 < var1.components.size(); ++var3) {
  309.          JDPSourceItem var2 = (JDPSourceItem)var1.components.elementAt(var3);
  310.          this.refreshRelations(var2);
  311.       }
  312.  
  313.    }
  314.  
  315.    public void setIconImagePath(String var1) {
  316.       this.imageLoader = new JDPImageLoader(this.user, this, var1);
  317.       (new Thread(this.imageLoader)).start();
  318.    }
  319.  
  320.    public void setClassDescriptor(JDPSourceItem var1) {
  321.       boolean var3 = true;
  322.  
  323.       for(int var4 = 0; var4 < var1.components.size(); ++var4) {
  324.          JDPSourceItem var2 = (JDPSourceItem)var1.components.elementAt(var4);
  325.          if (var2.type == 1 || var2.type == 2 || var2.type == 3) {
  326.             this.addNode(var2);
  327.             if (var3) {
  328.                var3 = false;
  329.             }
  330.          }
  331.       }
  332.  
  333.       for(int var5 = 0; var5 < var1.components.size(); ++var5) {
  334.          JDPSourceItem var7 = (JDPSourceItem)var1.components.elementAt(var5);
  335.          JDPMethodNode var8 = this.getNode(var7);
  336.          if ((var7.type == 1 || var7.type == 2) && var7.callsMethods != null) {
  337.             for(int var6 = 0; var6 < var7.callsMethods.size(); ++var6) {
  338.                this.addRelation(var8, (String)var7.callsMethods.elementAt(var6));
  339.             }
  340.          }
  341.       }
  342.  
  343.    }
  344.  
  345.    void drawIcon(JDPMethodNode var1, int var2, int var3) {
  346.       byte var4 = 0;
  347.       byte var5 = 20;
  348.       int var6 = var1.icon;
  349.       if (var1.equals(this.nodeRoot)) {
  350.          var6 = 1;
  351.          var5 = 30;
  352.          var4 = 20;
  353.       }
  354.  
  355.       var2 -= var5 / 2;
  356.       var3 -= var5 / 2;
  357.       if (var1.item != null) {
  358.          var6 = 0;
  359.          if (var1.item.isprivate) {
  360.             var6 += 2;
  361.          } else if (var1.item.ispublic) {
  362.             ++var6;
  363.          }
  364.  
  365.          if (var1.item.type == 3) {
  366.             var6 += 3;
  367.          }
  368.  
  369.          if (var1.item.type == 1) {
  370.             var6 += 6;
  371.          }
  372.       }
  373.  
  374.       if (var6 >= 0) {
  375.          if (this.iconImages == null) {
  376.             this.iconImages = ((Component)this).createImage(20, 20);
  377.          }
  378.  
  379.          if (this.largeIconImages == null) {
  380.             this.largeIconImages = ((Component)this).createImage(30, 30);
  381.          }
  382.  
  383.          if (var5 == 20) {
  384.             this.grI = this.iconImages.getGraphics();
  385.          } else {
  386.             this.grI = this.largeIconImages.getGraphics();
  387.          }
  388.  
  389.          this.grI.setColor(this.back);
  390.          this.grI.fillRect(0, 0, var5, var5);
  391.          this.grI.drawImage(this.iconImage, -var6 * var5, -var4, (ImageObserver)null);
  392.          if (var5 == 20) {
  393.             this.field_1.drawImage(this.iconImages, var2, var3, (ImageObserver)null);
  394.          } else {
  395.             this.field_1.drawImage(this.largeIconImages, var2, var3, (ImageObserver)null);
  396.          }
  397.  
  398.          var1.iconRect = new Rectangle(var2, var3, var5, var5);
  399.       }
  400.    }
  401.  
  402.    public void setNodeHorizontalGap(int var1) {
  403.       this.nodeSpaceWidth = var1;
  404.       this.reDraw();
  405.    }
  406.  
  407.    public int getNodeHorizontalGap() {
  408.       return this.nodeSpaceWidth;
  409.    }
  410.  
  411.    public void setMinimumWidth(int var1) {
  412.       this.minimumWidth = var1;
  413.    }
  414.  
  415.    public int getMinimumWidth() {
  416.       return this.minimumWidth;
  417.    }
  418.  
  419.    public void refreshAllNodes() {
  420.       for(int var1 = 0; var1 < this.allNodes.size(); ++var1) {
  421.          JDPMethodNode var2 = (JDPMethodNode)this.allNodes.elementAt(var1);
  422.          if (var2.item != null) {
  423.             this.refreshNodeFromItem(var2.item);
  424.          }
  425.       }
  426.  
  427.    }
  428.  
  429.    public void loadSource(String var1, JDPMethodTree var2) {
  430.       this.methodTree = var2;
  431.       this.loadSource(var1);
  432.    }
  433.  
  434.    public void loadSource(String var1) {
  435.       this.loadSource = var1;
  436.       if (!this.loadSource.endsWith(".java")) {
  437.          String var10001 = this.loadSource;
  438.          this.loadSource = var10001 + ".java";
  439.       }
  440.  
  441.       (new Thread(this)).start();
  442.    }
  443.  
  444.    void createExplorer(JDPUser var1, Panel var2) {
  445.       this.user = var1;
  446.       this.targetPanel = var2;
  447.       if (!JDPUser.classactivated) {
  448.          System.out.println("Software Violation - this class may only be used in conjunction with JDesignerPro.");
  449.       } else {
  450.          this.popupMenu = new JDPPopupMenu(var1, this);
  451.          ((Container)this).add(this.popupMenu);
  452.          this.setIconImagePath("images/JDPMETHD.gif");
  453.          this.drawColor = new Color(0, 0, 200);
  454.          this.textColor = new Color(0, 0, 150);
  455.          ((Component)this).setForeground(this.textColor);
  456.          this.controlColor = ((Component)this).getBackground();
  457.          Color var3 = new Color(255, 255, 214);
  458.          ((Component)this).setBackground(var3);
  459.          this.textHighlightText = var3;
  460.          this.textHighlight = this.textColor;
  461.          this.back = var3;
  462.          this.textHighlightText = JDPUtils.getTextHighlightText();
  463.          this.textHighlight = JDPUtils.getTextHighlight();
  464.          this.iconImages = ((Component)this).createImage(20, 20);
  465.          this.largeIconImages = ((Component)this).createImage(30, 30);
  466.          this.clear();
  467.          ((Component)this).show();
  468.       }
  469.    }
  470.  
  471.    Rectangle calcTotalImageDimension() {
  472.       Rectangle var1 = new Rectangle();
  473.       var1.width = 2 * this.nodeSpaceWidth;
  474.       var1.x = -this.nodeSpaceWidth - 20;
  475.       JDPMethodNode var2 = this.nodeRoot;
  476.       JDPMethodNode var5 = null;
  477.       boolean var6 = true;
  478.  
  479.       while(var2 != null && var6) {
  480.          if (var2.leftNodes == null) {
  481.             var6 = false;
  482.          } else {
  483.             JDPMethodNode var4 = null;
  484.  
  485.             for(int var7 = 0; var7 < var2.leftNodes.size(); ++var7) {
  486.                JDPMethodNode var3 = (JDPMethodNode)var2.leftNodes.elementAt(var7);
  487.                if (var3.expanded && !var3.equals(var2) && (var5 == null || !var3.equals(var5))) {
  488.                   var5 = var2;
  489.                   var4 = var3;
  490.                   var1.width += this.nodeSpaceWidth;
  491.                   var1.x -= this.nodeSpaceWidth;
  492.                   break;
  493.                }
  494.             }
  495.  
  496.             var2 = var4;
  497.          }
  498.       }
  499.  
  500.       var6 = true;
  501.       var2 = this.nodeRoot;
  502.  
  503.       while(var2 != null && var6) {
  504.          if (var2.rightNodes == null) {
  505.             var6 = false;
  506.          } else {
  507.             JDPMethodNode var21 = null;
  508.  
  509.             for(int var28 = 0; var28 < var2.rightNodes.size(); ++var28) {
  510.                JDPMethodNode var18 = (JDPMethodNode)var2.rightNodes.elementAt(var28);
  511.                if ((var18.item == null || var18.item.type != 3 || this.displayGlobals) && var18.expanded && !var18.equals(var2) && (var5 == null || !var18.equals(var5))) {
  512.                   var5 = var2;
  513.                   var21 = var18;
  514.                   var1.width += this.nodeSpaceWidth;
  515.                   break;
  516.                }
  517.             }
  518.  
  519.             var2 = var21;
  520.          }
  521.       }
  522.  
  523.       var1.width += this.nodeSpaceWidth * 2;
  524.       var1.x -= this.nodeSpaceWidth;
  525.       var2 = this.nodeRoot;
  526.       var5 = null;
  527.       var6 = true;
  528.       int var29 = 0;
  529.       int var8 = 0;
  530.       int var9 = 0;
  531.       int var10 = 0;
  532.       int var11 = 0;
  533.       int var12 = 0;
  534.       var1.y = 0;
  535.       var1.height = 0;
  536.  
  537.       while(var2 != null && var6) {
  538.          int var13 = 0;
  539.          if (var2.leftNodes == null) {
  540.             var6 = false;
  541.          } else {
  542.             JDPMethodNode var22 = null;
  543.             var29 = 0;
  544.  
  545.             for(int var14 = 0; var14 < var2.leftNodes.size(); ++var14) {
  546.                JDPMethodNode var19 = (JDPMethodNode)var2.leftNodes.elementAt(var14);
  547.                var9 = this.calcTextHeight(this.getDescription(var19));
  548.                if (var9 < 30) {
  549.                   var9 = 30;
  550.                }
  551.  
  552.                var13 += var9 + this.nodeSpaceHeight;
  553.                if (var19.expanded) {
  554.                   if (var29 == 0) {
  555.                      var29 = var13 - var9 / 2 - this.nodeSpaceHeight;
  556.                   }
  557.  
  558.                   if (var22 == null && !var19.equals(var2) && (var5 == null || !var19.equals(var5))) {
  559.                      var5 = var2;
  560.                      var22 = var19;
  561.                   }
  562.                }
  563.             }
  564.  
  565.             var10 = var8 - var13 / 2;
  566.             if (var10 < var1.y) {
  567.                var1.y = var10;
  568.             }
  569.  
  570.             var11 = var8 + var13 / 2;
  571.             if (var11 > var12) {
  572.                var12 = var11;
  573.             }
  574.  
  575.             var8 = var8 - var13 / 2 + var29;
  576.             var2 = var22;
  577.          }
  578.       }
  579.  
  580.       var6 = true;
  581.       var2 = this.nodeRoot;
  582.       var8 = 0;
  583.       var29 = 0;
  584.  
  585.       while(var2 != null && var6) {
  586.          int var40 = 0;
  587.          if (var2.rightNodes == null) {
  588.             var6 = false;
  589.          } else {
  590.             JDPMethodNode var23 = null;
  591.             var29 = 0;
  592.  
  593.             for(int var41 = 0; var41 < var2.rightNodes.size(); ++var41) {
  594.                JDPMethodNode var20 = (JDPMethodNode)var2.rightNodes.elementAt(var41);
  595.                if (var20.item == null || var20.item.type != 3 || this.displayGlobals) {
  596.                   var9 = this.calcTextHeight(this.getDescription(var20));
  597.                   if (var9 < 30) {
  598.                      var9 = 30;
  599.                   }
  600.  
  601.                   var40 += var9 + this.nodeSpaceHeight;
  602.                   if (var20.expanded) {
  603.                      if (var29 == 0) {
  604.                         var29 = var40 - var9 / 2 - this.nodeSpaceHeight;
  605.                      }
  606.  
  607.                      if (var23 == null && !var20.equals(var2) && (var5 == null || !var20.equals(var5))) {
  608.                         var5 = var2;
  609.                         var23 = var20;
  610.                      }
  611.                   }
  612.                }
  613.             }
  614.  
  615.             var10 = var8 - var40 / 2;
  616.             if (var10 < var1.y) {
  617.                var1.y = var10;
  618.             }
  619.  
  620.             var11 = var8 + var40 / 2;
  621.             if (var11 > var12) {
  622.                var12 = var11;
  623.             }
  624.  
  625.             var8 = var8 - var40 / 2 + var29;
  626.             var2 = var23;
  627.          }
  628.       }
  629.  
  630.       var1.height = var12 - var1.y;
  631.       return var1;
  632.    }
  633.  
  634.    boolean hasRightNodes(JDPMethodNode var1) {
  635.       if (var1.rightNodes != null && var1.rightNodes.size() > 0) {
  636.          if (this.displayGlobals) {
  637.             return true;
  638.          }
  639.  
  640.          for(int var3 = 0; var3 < var1.rightNodes.size(); ++var3) {
  641.             JDPMethodNode var2 = (JDPMethodNode)var1.rightNodes.elementAt(var3);
  642.             if (var2.item == null || var2.item.type == 2) {
  643.                return true;
  644.             }
  645.          }
  646.       }
  647.  
  648.       return false;
  649.    }
  650.  
  651.    int StringHeight() {
  652.       if (this.field_1 == null) {
  653.          return 0;
  654.       } else {
  655.          if (this.field_1.getFont() != this.lastFont) {
  656.             this.getFontWidths();
  657.             this.lastFont = this.field_1.getFont();
  658.          }
  659.  
  660.          return this.field_2.getHeight();
  661.       }
  662.    }
  663.  
  664.    public void run() {
  665.       if (this.loadSource != null && !this.loadingStatus) {
  666.          this.clear();
  667.          this.loadingStatus = true;
  668.          this.reDraw();
  669.          if (this.field_0 == null) {
  670.             this.field_0 = new JDPSourceParser(this.user);
  671.          }
  672.  
  673.          String var1 = this.user.u.readFromFile(this.loadSource);
  674.          if (var1 != null) {
  675.             JDPSourceItem var2 = this.field_0.parseSource(var1);
  676.             this.field_0.determineCalledMethods(var2);
  677.             this.setClassDescriptor(var2);
  678.             this.setRootNode(var2);
  679.             if (this.methodTree != null) {
  680.                this.methodTree.setClassDescriptor(var2);
  681.                this.setRootNode(this.methodTree.getSelectedSourceItem());
  682.                this.thisEvent = new Event(this, 701, (Object)null);
  683.             }
  684.          }
  685.  
  686.          this.loadingStatus = false;
  687.          this.reDraw();
  688.       }
  689.  
  690.    }
  691.  
  692.    public boolean handleEvent(Event var1) {
  693.       if (this.scrollEast != null && var1.target.equals(this.scrollEast)) {
  694.          byte var6 = 20;
  695.          if (this.scrollSouth != null && this.scrollSouth.isVisible()) {
  696.             var6 = 30;
  697.          }
  698.  
  699.          this.nothingChanged = false;
  700.          switch (var1.id) {
  701.             case 601:
  702.                this.dropEvent = true;
  703.                this.yOffset -= var6;
  704.                ((Component)this).repaint(2, 2, this.Bounds.width, this.Bounds.height);
  705.                return true;
  706.             case 602:
  707.                this.dropEvent = true;
  708.                this.yOffset += var6;
  709.                ((Component)this).repaint(2, 2, this.Bounds.width, this.Bounds.height);
  710.                return true;
  711.             case 603:
  712.                this.dropEvent = true;
  713.                this.yOffset = this.yOffset - this.Bounds.height + var6;
  714.                ((Component)this).repaint(2, 2, this.Bounds.width, this.Bounds.height);
  715.                return true;
  716.             case 604:
  717.                this.dropEvent = true;
  718.                this.yOffset = this.yOffset + this.Bounds.height - var6;
  719.                ((Component)this).repaint(2, 2, this.Bounds.width, this.Bounds.height);
  720.                return true;
  721.             case 605:
  722.                if (this.dropEvent) {
  723.                   this.dropEvent = false;
  724.                   return true;
  725.                }
  726.  
  727.                this.yOffset = this.scrollEast.getValue();
  728.                ((Component)this).repaint(2, 2, this.Bounds.width, this.Bounds.height);
  729.                return true;
  730.             default:
  731.                this.dropEvent = false;
  732.                return false;
  733.          }
  734.       } else if (this.scrollSouth != null && var1.target.equals(this.scrollSouth)) {
  735.          this.nothingChanged = false;
  736.          switch (var1.id) {
  737.             case 601:
  738.                this.dropEvent = true;
  739.                this.xOffset -= 10;
  740.                ((Component)this).repaint(2, 2, this.Bounds.width, this.Bounds.height);
  741.                return true;
  742.             case 602:
  743.                this.dropEvent = true;
  744.                this.xOffset += 10;
  745.                ((Component)this).repaint(2, 2, this.Bounds.width, this.Bounds.height);
  746.                return true;
  747.             case 603:
  748.                this.dropEvent = true;
  749.                this.xOffset = this.xOffset - this.Bounds.width + 10;
  750.                ((Component)this).repaint(2, 2, this.Bounds.width, this.Bounds.height);
  751.                return true;
  752.             case 604:
  753.                this.dropEvent = true;
  754.                this.xOffset = this.xOffset + this.Bounds.width - 10;
  755.                ((Component)this).repaint(2, 2, this.Bounds.width, this.Bounds.height);
  756.                return true;
  757.             case 605:
  758.                if (this.dropEvent) {
  759.                   this.dropEvent = false;
  760.                   return true;
  761.                }
  762.  
  763.                this.xOffset = this.scrollSouth.getValue();
  764.                ((Component)this).repaint(2, 2, this.Bounds.width, this.Bounds.height);
  765.                return true;
  766.             default:
  767.                this.dropEvent = false;
  768.                return false;
  769.          }
  770.       } else {
  771.          this.dropEvent = false;
  772.          if (!((Component)this).isEnabled()) {
  773.             return true;
  774.          } else {
  775.             switch (var1.id) {
  776.                case 501:
  777.                   ((Component)this).requestFocus();
  778.  
  779.                   for(int var5 = 0; var5 < this.displayedNodes.size(); ++var5) {
  780.                      JDPMethodNode var3 = (JDPMethodNode)this.displayedNodes.elementAt(var5);
  781.                      if (var3.expandRect != null && var3.expandRect.inside(var1.x, var1.y)) {
  782.                         if (var3.expanded) {
  783.                            var3.expanded = false;
  784.                         } else {
  785.                            this.resetExpanded(var3.nodeColumn);
  786.                            var3.expanded = true;
  787.                         }
  788.  
  789.                         this.resetSelections();
  790.                         var3.selected = true;
  791.                         this.makeVisibleNode = var3;
  792.                         this.lastEventTime = (new Date()).getTime();
  793.                         Date var8 = new Date();
  794.                         this.thisEvent = new Event(this, var8.getTime(), 701, var1.x, var1.y, var1.key, var1.modifiers, var3.name);
  795.                         this.reDraw();
  796.                         return true;
  797.                      }
  798.  
  799.                      if (var3.textRect != null && var3.textRect.inside(var1.x, var1.y)) {
  800.                         this.resetSelections();
  801.                         var3.selected = true;
  802.                         this.makeVisibleNode = var3;
  803.                         this.lastEventTime = (new Date()).getTime();
  804.                         Date var7 = new Date();
  805.                         this.thisEvent = new Event(this, var7.getTime(), 701, var1.x, var1.y, var1.key, var1.modifiers, var3.name);
  806.                         this.reDraw();
  807.                         return true;
  808.                      }
  809.  
  810.                      if (var3.iconRect != null && var3.iconRect.inside(var1.x, var1.y)) {
  811.                         this.setRootNode(var3.key);
  812.                         this.makeVisibleNode = var3;
  813.                         var3.selected = true;
  814.                         this.lastEventTime = (new Date()).getTime();
  815.                         Date var4 = new Date();
  816.                         this.thisEvent = new Event(this, var4.getTime(), 1001, var1.x, var1.y, var1.key, var1.modifiers, var3.name);
  817.                         this.reDraw();
  818.                         return true;
  819.                      }
  820.                   }
  821.  
  822.                   this.lastEventTime = 0L;
  823.                   if (!var1.target.equals(this)) {
  824.                      this.lastEventTime = (new Date()).getTime();
  825.                   }
  826.  
  827.                   return false;
  828.                case 502:
  829.                   long var2 = (new Date()).getTime();
  830.                   if (var2 - this.lastEventTime < 500L) {
  831.                      return true;
  832.                   }
  833.  
  834.                   this.loadPopupMenu(var1);
  835.                   return true;
  836.                case 1001:
  837.                   if (var1.target.equals(this.popupMenu)) {
  838.                      this.handlePopupMenu();
  839.                      this.lastEventTime = (new Date()).getTime();
  840.                      return true;
  841.                   }
  842.  
  843.                   return false;
  844.                default:
  845.                   this.lastEventTime = (new Date()).getTime();
  846.                   return false;
  847.             }
  848.          }
  849.       }
  850.    }
  851.  
  852.    public boolean addRelation(String var1, String var2) {
  853.       JDPMethodNode var3 = this.getNode(var1);
  854.       JDPMethodNode var4 = this.getNode(var2);
  855.       return this.addRelation(var3, var4);
  856.    }
  857.  
  858.    public boolean addRelation(JDPMethodNode var1, String var2) {
  859.       JDPMethodNode var3 = this.getNode(var2);
  860.       return this.addRelation(var1, var3);
  861.    }
  862.  
  863.    public boolean addRelation(JDPMethodNode var1, JDPMethodNode var2) {
  864.       if (var1 != null && var2 != null) {
  865.          this.addRightRelation(var1, var2);
  866.          if (var2.leftNodes == null) {
  867.             var2.leftNodes = new Vector();
  868.          }
  869.  
  870.          if (var2.leftNodes.indexOf(var1) < 0) {
  871.             var2.leftNodes.addElement(var1);
  872.          }
  873.  
  874.          if (var2.leftNodes.size() > 0 && var2.item != null && this.methodTree != null) {
  875.             JDPTreeBranch var3 = this.methodTree.getBranch(var2.item);
  876.             if (var3 != null) {
  877.                var3.compPosition = "";
  878.             }
  879.          }
  880.  
  881.          return true;
  882.       } else {
  883.          return false;
  884.       }
  885.    }
  886.  
  887.    public boolean addRightRelation(JDPMethodNode var1, JDPMethodNode var2) {
  888.       if (var1 != null && var2 != null) {
  889.          if (var1.rightNodes == null) {
  890.             var1.rightNodes = new Vector();
  891.          }
  892.  
  893.          if (var1.rightNodes.indexOf(var2) < 0) {
  894.             var1.rightNodes.addElement(var2);
  895.          }
  896.  
  897.          return true;
  898.       } else {
  899.          return false;
  900.       }
  901.    }
  902.  
  903.    Point getNodePosition(JDPMethodNode var1) {
  904.       for(int var2 = 0; var2 < this.displayedNodes.size(); ++var2) {
  905.          JDPMethodNode var3 = (JDPMethodNode)this.displayedNodes.elementAt(var2);
  906.          if (var3.equals(var1)) {
  907.             return var1.position;
  908.          }
  909.       }
  910.  
  911.       return null;
  912.    }
  913.  
  914.    public void setShowNames(boolean var1) {
  915.       this.displayName = var1;
  916.       this.reDraw();
  917.    }
  918.  
  919.    public boolean getShowNames() {
  920.       return this.displayName;
  921.    }
  922.  
  923.    void resetExpanded(int var1) {
  924.       if (var1 == 0) {
  925.          for(int var4 = 0; var4 < this.allNodes.size(); ++var4) {
  926.             JDPMethodNode var5 = (JDPMethodNode)this.allNodes.elementAt(var4);
  927.             var5.expanded = false;
  928.          }
  929.  
  930.       } else {
  931.          for(int var2 = 0; var2 < this.displayedNodes.size(); ++var2) {
  932.             JDPMethodNode var3 = (JDPMethodNode)this.displayedNodes.elementAt(var2);
  933.             if (var3.nodeColumn >= var1 && var1 > 1000) {
  934.                var3.expanded = false;
  935.             } else if (var3.nodeColumn <= var1 && var1 < 1000) {
  936.                var3.expanded = false;
  937.             }
  938.          }
  939.  
  940.       }
  941.    }
  942.  
  943.    void drawNode(JDPMethodNode var1, int var2, int var3, int var4, int var5) {
  944.       if (var1 != null) {
  945.          if (this.makeVisibleNode != null && this.makeVisibleNode.equals(var1)) {
  946.             boolean var6 = false;
  947.             boolean var7 = false;
  948.             int var8 = this.nodeSpaceWidth + 30;
  949.             if (var2 < 100) {
  950.                this.scrollSideways = -100;
  951.             } else if (var2 > ((Component)this).bounds().width - var8) {
  952.                this.scrollSideways = var2 - ((Component)this).bounds().width + var8;
  953.             } else {
  954.                var6 = true;
  955.             }
  956.  
  957.             if (var3 < 40) {
  958.                this.scrollDown = -40;
  959.             } else if (var3 > ((Component)this).bounds().height - 90) {
  960.                this.scrollDown = var3 - ((Component)this).bounds().height + 90;
  961.             } else {
  962.                var7 = true;
  963.             }
  964.  
  965.             if (var6 && var7) {
  966.                this.makeVisibleNode = null;
  967.             }
  968.          }
  969.  
  970.          this.displayedNodes.addElement(var1);
  971.          var1.position = new Point(var2, var3);
  972.          var1.nodeColumn = var5;
  973.          if (var4 == 0) {
  974.             this.drawIcon(var1, var2, var3);
  975.          }
  976.  
  977.          if (var1.expanded || var1.equals(this.nodeRoot)) {
  978.             if (var4 != 0) {
  979.                var2 += this.nodeSpaceWidth;
  980.                if (var1.rightNodes != null) {
  981.                   int[] var9 = this.calcTotalHeight(var1, 1);
  982.                   int var10 = 0;
  983.  
  984.                   for(int var11 = 0; var11 < var9.length - 1; ++var11) {
  985.                      var10 += var9[var11];
  986.                   }
  987.  
  988.                   var3 -= var10 / 2;
  989.                   boolean var24 = true;
  990.  
  991.                   for(int var12 = 0; var12 < var1.rightNodes.size(); ++var12) {
  992.                      JDPMethodNode var20 = (JDPMethodNode)var1.rightNodes.elementAt(var12);
  993.                      if (var20.item == null || var20.item.type != 3 || this.displayGlobals) {
  994.                         if (var20.equals(var1)) {
  995.                            this.drawArc(var1);
  996.                         } else {
  997.                            JDPMethodNode var13 = this.getNodeVisible(var20);
  998.                            if (var13 != null) {
  999.                               this.drawArrow(var1, var13);
  1000.                            } else {
  1001.                               if (!var24) {
  1002.                                  var3 += var9[var12] / 2;
  1003.                               }
  1004.  
  1005.                               var24 = false;
  1006.                               this.drawNode(var20, var2, var3, 1, var5 + 1);
  1007.                               this.drawArrow(var1, var20);
  1008.                               var3 += var9[var12] / 2;
  1009.                            }
  1010.                         }
  1011.                      }
  1012.                   }
  1013.                }
  1014.             }
  1015.  
  1016.             if (var4 != 1) {
  1017.                var2 -= this.nodeSpaceWidth;
  1018.                if (var1.leftNodes != null) {
  1019.                   int[] var22 = this.calcTotalHeight(var1, 0);
  1020.                   int var23 = 0;
  1021.  
  1022.                   for(int var25 = 0; var25 < var22.length - 1; ++var25) {
  1023.                      var23 += var22[var25];
  1024.                   }
  1025.  
  1026.                   var3 -= var23 / 2;
  1027.  
  1028.                   for(int var26 = 0; var26 < var1.leftNodes.size(); ++var26) {
  1029.                      JDPMethodNode var21 = (JDPMethodNode)var1.leftNodes.elementAt(var26);
  1030.                      if (var21.equals(var1)) {
  1031.                         this.drawArc(var1);
  1032.                      } else {
  1033.                         JDPMethodNode var27 = this.getNodeVisible(var21);
  1034.                         if (var27 != null) {
  1035.                            this.drawArrow(var27, var1);
  1036.                         } else {
  1037.                            this.drawNode(var21, var2, var3, 0, var5 - 1);
  1038.                            this.drawArrow(var21, var1);
  1039.                            var3 += var22[var26] / 2;
  1040.                            if (var26 + 1 < var22.length) {
  1041.                               var3 += var22[var26 + 1] / 2;
  1042.                            }
  1043.                         }
  1044.                      }
  1045.                   }
  1046.                }
  1047.             }
  1048.          }
  1049.  
  1050.          if (var4 != 0) {
  1051.             this.drawIcon(var1, var2, var3);
  1052.          }
  1053.  
  1054.          this.drawExpandRect(var1, var2, var3, var4);
  1055.          this.drawText(var1, var2, var3, var4);
  1056.       }
  1057.    }
  1058.  
  1059.    public JDPMethodNode getNode(String var1) {
  1060.       for(int var2 = 0; var2 < this.allNodes.size(); ++var2) {
  1061.          JDPMethodNode var3 = (JDPMethodNode)this.allNodes.elementAt(var2);
  1062.          if (var3.key.equals(var1)) {
  1063.             return var3;
  1064.          }
  1065.       }
  1066.  
  1067.       return null;
  1068.    }
  1069.  
  1070.    public JDPMethodNode getNode(JDPSourceItem var1) {
  1071.       for(int var2 = 0; var2 < this.allNodes.size(); ++var2) {
  1072.          JDPMethodNode var3 = (JDPMethodNode)this.allNodes.elementAt(var2);
  1073.          if (var3.item.equals(var1)) {
  1074.             return var3;
  1075.          }
  1076.       }
  1077.  
  1078.       return null;
  1079.    }
  1080.  
  1081.    public boolean setRootNode(String var1) {
  1082.       JDPMethodNode var2 = this.getNode(var1);
  1083.       this.nodeRoot = var2;
  1084.       this.resetSelections();
  1085.       this.resetExpanded(0);
  1086.       this.reDraw();
  1087.       return var2 != null;
  1088.    }
  1089.  
  1090.    void drawArc(JDPMethodNode var1) {
  1091.       Point var2 = this.getNodePosition(var1);
  1092.       int var3 = var2.x;
  1093.       int var4 = var2.y;
  1094.       byte var5 = 30;
  1095.       int var6 = 10;
  1096.       if (var1.equals(this.nodeRoot)) {
  1097.          var5 = 40;
  1098.          var6 = 15;
  1099.       }
  1100.  
  1101.       short var7 = 0;
  1102.       short var8 = 360;
  1103.       byte var9 = 5;
  1104.       int var10 = var9 + 4;
  1105.       byte var11 = 3;
  1106.       if (var1.nodeColumn >= 1000) {
  1107.          var11 = var5;
  1108.          var6 = -var6;
  1109.          var10 = -var10;
  1110.       } else {
  1111.          var7 = 270;
  1112.          var8 = 300;
  1113.          var4 -= 5;
  1114.          var3 -= 5;
  1115.       }
  1116.  
  1117.       if (var1.selected) {
  1118.          this.field_1.setColor(Color.red);
  1119.       } else {
  1120.          this.field_1.setColor(this.drawColor);
  1121.       }
  1122.  
  1123.       this.field_1.drawArc(var3 - var11, var4 - var5, var5, var5, var7, var8);
  1124.       int[] var12 = new int[]{var3 + var6 + var10, var3 + var6, var3 + var6 + var10, var3 + var6 + var10};
  1125.       int[] var13 = new int[]{var4 - var9, var4, var4 + var9, var4 - var9};
  1126.       this.field_1.fillPolygon(var12, var13, 4);
  1127.    }
  1128.  
  1129.    public boolean setRootNode(JDPSourceItem var1) {
  1130.       if (var1 == null) {
  1131.          this.nodeRoot = null;
  1132.          this.resetSelections();
  1133.          this.resetExpanded(0);
  1134.          this.reDraw();
  1135.          return false;
  1136.       } else {
  1137.          JDPMethodNode var2 = this.getNode(var1);
  1138.          this.nodeRoot = var2;
  1139.          this.resetSelections();
  1140.          this.resetExpanded(0);
  1141.          this.reDraw();
  1142.          return var2 != null;
  1143.       }
  1144.    }
  1145.  
  1146.    public JDPSourceItem getSelectedItem() {
  1147.       for(int var1 = 0; var1 < this.allNodes.size(); ++var1) {
  1148.          JDPMethodNode var2 = (JDPMethodNode)this.allNodes.elementAt(var1);
  1149.          if (var2.selected) {
  1150.             return var2.item;
  1151.          }
  1152.       }
  1153.  
  1154.       return null;
  1155.    }
  1156.  
  1157.    public void refreshNodeFromItem(JDPSourceItem var1) {
  1158.       JDPMethodNode var2 = this.getNode(var1);
  1159.       if (var2 != null) {
  1160.          var2.key = var1.name;
  1161.          if (var1.parmNames != null) {
  1162.             String var10001 = var2.key;
  1163.             var2.key = var10001 + Integer.toString(var1.parmNames.size());
  1164.          }
  1165.  
  1166.          var2.name = var1.name;
  1167.          var2.text = var1.description;
  1168.          var2.item = var1;
  1169.          var1.node = var2;
  1170.          this.reDraw();
  1171.       }
  1172.  
  1173.    }
  1174.  
  1175.    public void setShowText(boolean var1) {
  1176.       this.displayText = var1;
  1177.       this.reDraw();
  1178.    }
  1179.  
  1180.    public boolean getShowText() {
  1181.       return this.displayText;
  1182.    }
  1183.  
  1184.    public void refreshRelations(JDPSourceItem var1) {
  1185.       JDPMethodNode var2 = this.getNode(var1);
  1186.       if (var2 != null) {
  1187.          if (var2.rightNodes != null) {
  1188.             for(int var4 = 0; var4 < var2.rightNodes.size(); ++var4) {
  1189.                JDPMethodNode var3 = (JDPMethodNode)var2.rightNodes.elementAt(var4);
  1190.                var3.leftNodes.removeElement(var2);
  1191.                if (var3.leftNodes.size() == 0 && this.methodTree != null) {
  1192.                   this.methodTree.getBranch(var3.item).compPosition = "UNUSED";
  1193.                }
  1194.             }
  1195.          }
  1196.  
  1197.          var2.rightNodes = null;
  1198.          if ((var1.type == 1 || var1.type == 2) && var1.callsMethods != null) {
  1199.             for(int var5 = 0; var5 < var1.callsMethods.size(); ++var5) {
  1200.                this.addRelation(var2, (String)var1.callsMethods.elementAt(var5));
  1201.             }
  1202.          }
  1203.  
  1204.       }
  1205.    }
  1206.  
  1207.    public void update(Graphics var1) {
  1208.       Dimension var2 = ((Component)this).size();
  1209.       if (this.Bounds == null || var2.width != this.Bounds.width || var2.height != this.Bounds.height || !((Component)this).getFont().equals(this.prevFont) || !this.prevForeground.equals(((Component)this).getForeground()) || !this.prevBackground.equals(((Component)this).getBackground())) {
  1210.          this.nothingChanged = false;
  1211.       }
  1212.  
  1213.       if (this.imageLoader != null && this.imageLoader.getImageReady()) {
  1214.          this.iconImage = this.imageLoader.thisImage;
  1215.          this.imageLoader = null;
  1216.          this.nothingChanged = false;
  1217.       }
  1218.  
  1219.       if (this.nothingChanged && this.offscreen != null && this.thisEvent == null) {
  1220.          var1.drawImage(this.offscreen, 0, 0, (ImageObserver)null);
  1221.       } else if (this.iconImage != null) {
  1222.          this.nothingChanged = true;
  1223.          this.prevFont = ((Component)this).getFont();
  1224.          this.prevForeground = ((Component)this).getForeground();
  1225.          this.prevBackground = ((Component)this).getBackground();
  1226.          this.back = ((Component)this).getBackground();
  1227.          this.controlColor = ((Component)this).getParent().getBackground();
  1228.          this.displayedNodes = new Vector();
  1229.          this.maxTextWidth = this.nodeSpaceWidth - 30;
  1230.          Rectangle var3 = ((Component)this).bounds();
  1231.          if (this.offscreen == null || var3.width != this.offscreensize.width || var3.height != this.offscreensize.height) {
  1232.             this.offscreen = ((Component)this).createImage(var3.width, var3.height);
  1233.             this.offscreensize = var3;
  1234.             this.field_1 = this.offscreen.getGraphics();
  1235.             this.field_1.setFont(((Component)this).getFont());
  1236.          }
  1237.  
  1238.          this.Bounds = ((Component)this).bounds();
  1239.          if (this.loadingStatus) {
  1240.             this.field_1.setColor(this.back);
  1241.             this.field_1.fillRect(2, 2, this.Bounds.width, this.Bounds.height);
  1242.             this.field_1.setColor(this.drawColor);
  1243.             this.field_1.drawString("Loading...", this.Bounds.width / 2 - 30, this.Bounds.height / 2);
  1244.          } else {
  1245.             int var4 = this.Bounds.width / 2;
  1246.             int var5 = this.Bounds.height / 2;
  1247.             Rectangle var6 = this.calcTotalImageDimension();
  1248.             if (-var6.x > var4) {
  1249.                var4 = -var6.x;
  1250.             }
  1251.  
  1252.             if (-var6.y > var5 - 20) {
  1253.                var5 = -var6.y + 20;
  1254.             }
  1255.  
  1256.             this.maxWidth = var4 + var6.width + var6.x;
  1257.             this.maxHeight = var5 + var6.height + var6.y;
  1258.             if (this.maxWidth > 0 && this.xOffset > this.maxWidth + 20 - this.Bounds.width) {
  1259.                this.xOffset = this.maxWidth + 20 - this.Bounds.width;
  1260.             }
  1261.  
  1262.             if (this.xOffset < 0) {
  1263.                this.xOffset = 0;
  1264.             }
  1265.  
  1266.             if (this.maxHeight > 0 && this.yOffset > this.maxHeight + 20 - this.Bounds.height) {
  1267.                this.yOffset = this.maxHeight + 20 - this.Bounds.height;
  1268.             }
  1269.  
  1270.             if (this.yOffset < 0) {
  1271.                this.yOffset = 0;
  1272.             }
  1273.  
  1274.             this.field_1.setFont(((Component)this).getFont());
  1275.             this.field_1.setColor(this.back);
  1276.             this.field_1.fillRect(2, 2, this.Bounds.width, this.Bounds.height);
  1277.             this.currheight = this.StringHeight();
  1278.             this.drawNode(this.nodeRoot, var4 - this.xOffset - 20, var5 - this.yOffset, 3, 1000);
  1279.          }
  1280.  
  1281.          byte var7 = 0;
  1282.          if (this.threeDBorder) {
  1283.             this.field_1.setColor(JDPUtils.darker(this.controlColor));
  1284.             this.field_1.drawLine(0, 0, this.Bounds.width, 0);
  1285.             this.field_1.drawLine(0, 0, 0, this.Bounds.height);
  1286.             this.field_1.setColor(Color.black);
  1287.             this.field_1.drawLine(1, 1, this.Bounds.width - 1, 1);
  1288.             this.field_1.drawLine(1, 1, 1, this.Bounds.height - 1);
  1289.             this.field_1.setColor(this.controlColor);
  1290.             this.field_1.drawLine(this.Bounds.width - 2, 2, this.Bounds.width - 2, this.Bounds.height - 2);
  1291.             this.field_1.drawLine(2, this.Bounds.height - 2, this.Bounds.width - 2, this.Bounds.height - 2);
  1292.             this.field_1.setColor(JDPUtils.brighter(this.controlColor));
  1293.             this.field_1.drawLine(this.Bounds.width - 1, 1, this.Bounds.width - 1, this.Bounds.height - 1);
  1294.             this.field_1.drawLine(1, this.Bounds.height - 1, this.Bounds.width - 1, this.Bounds.height - 1);
  1295.          } else {
  1296.             var7 = 1;
  1297.             this.field_1.setColor(Color.white);
  1298.             this.field_1.drawRect(1, 1, this.Bounds.width - 2, this.Bounds.height - 2);
  1299.             this.field_1.setColor(Color.black);
  1300.             this.field_1.drawRect(0, 0, this.Bounds.width - 1, this.Bounds.height - 1);
  1301.          }
  1302.  
  1303.          if (this.yOffset == 1) {
  1304.             this.yOffset = 0;
  1305.          }
  1306.  
  1307.          if (this.Bounds.height > this.maxHeight - 1 && this.yOffset <= 0) {
  1308.             if (this.scrollEast != null) {
  1309.                this.scrollEast.hide();
  1310.             }
  1311.  
  1312.             this.widthRect = new Rectangle(this.Bounds.width - 7, 0, 4, this.Bounds.height);
  1313.          } else {
  1314.             if (this.scrollEast == null) {
  1315.                this.scrollEast = new Scrollbar(1, 0, 100, 0, 100);
  1316.                ((Container)this).add(this.scrollEast);
  1317.                this.scrollEast.setBackground(this.controlColor);
  1318.             }
  1319.  
  1320.             this.maxWidth += 15;
  1321.             int var8 = this.maxHeight;
  1322.             if (this.maxHeight < this.Bounds.height) {
  1323.                var8 += this.yOffset;
  1324.             }
  1325.  
  1326.             int var11 = 0;
  1327.             if (System.getProperty("java.vendor").startsWith("Netscape") && System.getProperty("java.version").compareTo("1.1.5") < 0 || System.getProperty("java.vendor").startsWith("Microsoft") && System.getProperty("java.version").compareTo("1.1.4") < 0) {
  1328.                var11 = this.Bounds.height;
  1329.             }
  1330.  
  1331.             this.scrollEast.setValues(this.yOffset, this.Bounds.height, 0, var8 - var11);
  1332.             if ((this.Bounds.width <= this.maxWidth || this.xOffset > 0) && !this.scrollSouthDisabled) {
  1333.                this.scrollEast.reshape(this.Bounds.width - 13 + var7, 2 - var7, 12, this.Bounds.height - 15 + var7 * 2);
  1334.             } else {
  1335.                this.scrollEast.reshape(this.Bounds.width - 13 + var7, 2 - var7, 12, this.Bounds.height - 3 + var7 * 2);
  1336.             }
  1337.  
  1338.             if (this.scrollEastDisabled) {
  1339.                this.scrollEast.hide();
  1340.             } else {
  1341.                this.scrollEast.show();
  1342.             }
  1343.  
  1344.             this.layout();
  1345.             this.widthRect = new Rectangle(this.Bounds.width - 19, 0, 5, this.Bounds.height);
  1346.          }
  1347.  
  1348.          if (this.Bounds.width > this.maxWidth && this.xOffset <= 0) {
  1349.             if (this.scrollSouth != null) {
  1350.                this.scrollSouth.hide();
  1351.             }
  1352.          } else {
  1353.             if (this.scrollSouth == null) {
  1354.                this.scrollSouth = new Scrollbar(0, 0, 100, 0, 100);
  1355.                ((Container)this).add(this.scrollSouth);
  1356.                this.scrollSouth.setBackground(this.controlColor);
  1357.             }
  1358.  
  1359.             this.maxHeight += 15;
  1360.             int var9 = 0;
  1361.             if (System.getProperty("java.vendor").startsWith("Netscape") && System.getProperty("java.version").compareTo("1.1.5") < 0 || System.getProperty("java.vendor").startsWith("Microsoft") && System.getProperty("java.version").compareTo("1.1.4") < 0) {
  1362.                var9 = this.Bounds.width;
  1363.             }
  1364.  
  1365.             this.scrollSouth.setValues(this.xOffset, this.Bounds.width, 0, this.maxWidth - var9);
  1366.             if (this.scrollEast != null && this.scrollEast.isVisible()) {
  1367.                this.scrollSouth.reshape(2 - var7, this.Bounds.height - 13 + var7, this.Bounds.width - 3 + var7 * 2 - 12, 12);
  1368.             } else {
  1369.                this.scrollSouth.reshape(2 - var7, this.Bounds.height - 13 + var7, this.Bounds.width - 3 + var7 * 2, 12);
  1370.             }
  1371.  
  1372.             if (this.scrollSouthDisabled) {
  1373.                this.scrollSouth.hide();
  1374.             } else {
  1375.                this.scrollSouth.show();
  1376.             }
  1377.          }
  1378.  
  1379.          if (this.scrollEast != null && this.scrollSouth != null && this.scrollEast.isVisible() && this.scrollSouth.isVisible()) {
  1380.             this.field_1.setColor(this.controlColor);
  1381.             this.field_1.fillRect(this.Bounds.width - 14, this.Bounds.height - 14, 13, 13);
  1382.          }
  1383.  
  1384.          var1.drawImage(this.offscreen, 0, 0, this.Bounds.width, this.Bounds.height, (ImageObserver)null);
  1385.          if (this.thisEvent != null) {
  1386.             Event var10 = this.thisEvent;
  1387.             this.thisEvent = null;
  1388.             super.postEvent(var10);
  1389.          }
  1390.  
  1391.          if (this.scrollDown != 0 || this.scrollSideways != 0) {
  1392.             this.xOffset += this.scrollSideways;
  1393.             this.yOffset += this.scrollDown;
  1394.             this.scrollSideways = 0;
  1395.             this.scrollDown = 0;
  1396.             this.makeVisibleNode = null;
  1397.             this.reDraw();
  1398.          }
  1399.  
  1400.       }
  1401.    }
  1402.  
  1403.    public void setScrollEastDisabled(boolean var1) {
  1404.       this.scrollEastDisabled = var1;
  1405.       this.reDraw();
  1406.    }
  1407.  
  1408.    public boolean getScrollEastDisabled() {
  1409.       return this.scrollEastDisabled;
  1410.    }
  1411.  
  1412.    public void setShowGlobals(boolean var1) {
  1413.       this.displayGlobals = var1;
  1414.       this.reDraw();
  1415.    }
  1416.  
  1417.    public boolean getShowGlobals() {
  1418.       return this.displayGlobals;
  1419.    }
  1420.  
  1421.    int[] getFontWidths() {
  1422.       this.field_2 = this.field_1.getFontMetrics();
  1423.       this.widths = this.field_2.getWidths();
  1424.       return this.widths;
  1425.    }
  1426.  
  1427.    int calcTextHeight(String var1) {
  1428.       StringTokenizer var2 = new StringTokenizer(var1, " -", true);
  1429.       int var4 = 0;
  1430.  
  1431.       int var5;
  1432.       int var6;
  1433.       for(var6 = 1; var2.hasMoreTokens(); var4 += var5) {
  1434.          String var3 = var2.nextToken();
  1435.          var5 = this.user.u.StringWidth(this.field_1, var3);
  1436.          if (var5 > this.maxTextWidth) {
  1437.             for(int var7 = 0; var7 < var3.length(); ++var7) {
  1438.                String var9 = var3.substring(var7, var7 + 1);
  1439.                int var8 = this.user.u.StringWidth(this.field_1, var9);
  1440.                if (var4 + var8 < this.maxTextWidth) {
  1441.                   var4 += var8;
  1442.                } else {
  1443.                   var4 = var8;
  1444.                   ++var6;
  1445.                }
  1446.             }
  1447.  
  1448.             var5 = 0;
  1449.             var3 = "";
  1450.          }
  1451.  
  1452.          if (var4 + var5 > this.maxTextWidth) {
  1453.             ++var6;
  1454.             var4 = 0;
  1455.          }
  1456.       }
  1457.  
  1458.       return var6 * (this.currheight - 2);
  1459.    }
  1460.  
  1461.    public String getDescription(JDPMethodNode var1) {
  1462.       String var2 = "";
  1463.       if (this.displayName && var1.name != null) {
  1464.          var2 = var2 + var1.name;
  1465.       }
  1466.  
  1467.       if (this.displayName && this.displayText && var1.name != null && var1.text != null && !var1.name.equals("") && !var1.text.equals("")) {
  1468.          var2 = var2 + " - ";
  1469.       }
  1470.  
  1471.       if (this.displayText && var1.text != null) {
  1472.          var2 = var2 + var1.text;
  1473.       }
  1474.  
  1475.       return var2;
  1476.    }
  1477.  
  1478.    public void reDraw() {
  1479.       this.nothingChanged = false;
  1480.       ((Component)this).repaint();
  1481.    }
  1482.  
  1483.    public void paint(Graphics var1) {
  1484.       this.update(var1);
  1485.    }
  1486.  
  1487.    public void removeNode(JDPMethodNode var1) {
  1488.       if (var1.rightNodes != null) {
  1489.          for(int var3 = 0; var3 < var1.rightNodes.size(); ++var3) {
  1490.             JDPMethodNode var2 = (JDPMethodNode)var1.rightNodes.elementAt(var3);
  1491.             if (var2.leftNodes != null) {
  1492.                var2.leftNodes.removeElement(var1);
  1493.                if (var2.leftNodes.size() == 0) {
  1494.                   JDPTreeBranch var4 = this.methodTree.getBranch(var2.item);
  1495.                   if (var4 != null) {
  1496.                      var4.compPosition = "UNUSED";
  1497.                   }
  1498.                }
  1499.             }
  1500.          }
  1501.       }
  1502.  
  1503.       this.displayedNodes.removeElement(var1);
  1504.       this.allNodes.removeElement(var1);
  1505.       if (this.field_0 != null && var1.item != null) {
  1506.          this.field_0.removeItem(var1.item);
  1507.       }
  1508.  
  1509.       System.gc();
  1510.    }
  1511.  
  1512.    public JDPMethodNode getSelectedNode() {
  1513.       for(int var1 = 0; var1 < this.allNodes.size(); ++var1) {
  1514.          JDPMethodNode var2 = (JDPMethodNode)this.allNodes.elementAt(var1);
  1515.          if (var2.selected) {
  1516.             return var2;
  1517.          }
  1518.       }
  1519.  
  1520.       return null;
  1521.    }
  1522.  
  1523.    public Dimension minimumSize() {
  1524.       Dimension var1 = new Dimension(this.minimumWidth, this.minimumHeight);
  1525.       return var1;
  1526.    }
  1527.  
  1528.    void drawArrow(JDPMethodNode var1, JDPMethodNode var2) {
  1529.       Point var3 = this.getNodePosition(var1);
  1530.       Point var4 = this.getNodePosition(var2);
  1531.       int var5 = var3.x;
  1532.       int var6 = var3.y;
  1533.       int var7 = var4.x;
  1534.       int var8 = var4.y;
  1535.       if (var3.x < var4.x) {
  1536.          var5 += 10;
  1537.          var7 -= 10;
  1538.          if (var1.equals(this.nodeRoot)) {
  1539.             var5 += 5;
  1540.          }
  1541.  
  1542.          if (var2.equals(this.nodeRoot)) {
  1543.             var7 -= 5;
  1544.          }
  1545.       } else if (var3.x > var4.x) {
  1546.          var5 -= 10;
  1547.          var7 += 10;
  1548.          if (var1.equals(this.nodeRoot)) {
  1549.             var5 -= 5;
  1550.          }
  1551.  
  1552.          if (var2.equals(this.nodeRoot)) {
  1553.             var7 += 5;
  1554.          }
  1555.  
  1556.          if (var6 > var8) {
  1557.             var6 -= 5;
  1558.             var8 += 5;
  1559.          } else if (var6 < var8) {
  1560.             var6 += 5;
  1561.             var8 -= 5;
  1562.          } else {
  1563.             var6 -= 5;
  1564.             var8 -= 5;
  1565.          }
  1566.       } else if (var6 > var8) {
  1567.          var6 -= 10;
  1568.          var8 += 10;
  1569.          if (var1.equals(this.nodeRoot)) {
  1570.             var6 -= 5;
  1571.          }
  1572.  
  1573.          if (var2.equals(this.nodeRoot)) {
  1574.             var8 += 5;
  1575.          }
  1576.       } else {
  1577.          var6 += 10;
  1578.          var8 -= 10;
  1579.          if (var1.equals(this.nodeRoot)) {
  1580.             var6 += 5;
  1581.          }
  1582.  
  1583.          if (var2.equals(this.nodeRoot)) {
  1584.             var8 -= 5;
  1585.          }
  1586.       }
  1587.  
  1588.       byte var9 = 5;
  1589.       if (!var1.selected && !var2.selected) {
  1590.          this.field_1.setColor(this.drawColor);
  1591.       } else {
  1592.          this.field_1.setColor(Color.red);
  1593.       }
  1594.  
  1595.       int var10 = var9 + 4;
  1596.       if (var5 < var7) {
  1597.          var10 = -var10;
  1598.       } else if (var5 == var7 && var6 < var8) {
  1599.          var10 = -var10;
  1600.       }
  1601.  
  1602.       if (var5 != var7) {
  1603.          this.field_1.drawLine(var5, var6, var7 + var10, var8);
  1604.          int[] var13 = new int[]{var7 + var10, var7, var7 + var10, var7 + var10};
  1605.          int[] var14 = new int[]{var8 - var9, var8, var8 + var9, var8 - var9};
  1606.          this.field_1.fillPolygon(var13, var14, 4);
  1607.       } else {
  1608.          this.field_1.drawLine(var5, var6, var7, var8);
  1609.          int[] var11 = new int[]{var8 + var10, var8, var8 + var10, var8 + var10};
  1610.          int[] var12 = new int[]{var7 - var9, var7, var7 + var9, var7 - var9};
  1611.          this.field_1.fillPolygon(var12, var11, 4);
  1612.       }
  1613.    }
  1614.  
  1615.    public void addNode(String var1, String var2) {
  1616.       JDPMethodNode var3 = new JDPMethodNode();
  1617.       var3.key = var1;
  1618.       var3.name = var1;
  1619.       var3.text = var2;
  1620.       this.allNodes.addElement(var3);
  1621.    }
  1622.  
  1623.    public void addNode(JDPSourceItem var1) {
  1624.       JDPMethodNode var2 = new JDPMethodNode();
  1625.       var2.key = var1.name;
  1626.       if (var1.parmNames != null) {
  1627.          String var10001 = var2.key;
  1628.          var2.key = var10001 + Integer.toString(var1.parmNames.size());
  1629.       }
  1630.  
  1631.       var2.name = var1.name;
  1632.       var2.text = var1.description;
  1633.       var2.item = var1;
  1634.       var1.node = var2;
  1635.       this.allNodes.addElement(var2);
  1636.    }
  1637.  
  1638.    void resetSelections() {
  1639.       for(int var1 = 0; var1 < this.allNodes.size(); ++var1) {
  1640.          JDPMethodNode var2 = (JDPMethodNode)this.allNodes.elementAt(var1);
  1641.          var2.selected = false;
  1642.       }
  1643.  
  1644.    }
  1645.  
  1646.    public void clear() {
  1647.       this.allNodes = new Vector();
  1648.       this.displayedNodes = new Vector();
  1649.       this.nodeRoot = null;
  1650.       System.gc();
  1651.    }
  1652.  
  1653.    public void setScrollSouthDisabled(boolean var1) {
  1654.       this.scrollSouthDisabled = var1;
  1655.       this.reDraw();
  1656.    }
  1657.  
  1658.    public boolean getScrollSouthDisabled() {
  1659.       return this.scrollSouthDisabled;
  1660.    }
  1661.  
  1662.    void drawText(JDPMethodNode var1, int var2, int var3, int var4) {
  1663.       int var5 = this.calcTextHeight(this.getDescription(var1));
  1664.       int var6 = this.calcTextWidth(this.getDescription(var1));
  1665.       int var7 = this.user.u.StringWidth(this.field_1, "-");
  1666.       if (var4 == 0) {
  1667.          var2 = var2 - 12 - var6;
  1668.          var3 = var3 - var5 / 2 + this.currheight - 4;
  1669.       } else if (var4 == 1) {
  1670.          var2 += 12;
  1671.          var3 = var3 - var5 / 2 + this.currheight - 4;
  1672.       } else if (var4 == 2) {
  1673.          var2 -= var6 / 2;
  1674.          var3 = var3 - 17 - var5 + this.currheight - 4;
  1675.       } else if (var4 == 3) {
  1676.          var2 -= var6 / 2;
  1677.          var3 = var3 + 15 + this.currheight - 2;
  1678.       }
  1679.  
  1680.       var1.textRect = new Rectangle(var2 - 2, var3 - this.currheight + 4, var6 + 2, var5 + 1);
  1681.       StringTokenizer var8 = new StringTokenizer(this.getDescription(var1), " ", true);
  1682.       StringBuffer var9 = new StringBuffer();
  1683.       int var11 = 0;
  1684.       int var12 = 1;
  1685.  
  1686.       while(var8.hasMoreTokens()) {
  1687.          String var10 = var8.nextToken();
  1688.          int var13 = this.user.u.StringWidth(this.field_1, var10);
  1689.          if (var13 > this.maxTextWidth) {
  1690.             for(int var14 = 0; var14 < var10.length(); ++var14) {
  1691.                String var16 = var10.substring(var14, var14 + 1);
  1692.                int var15 = this.user.u.StringWidth(this.field_1, var16);
  1693.                if (var11 + var15 < this.maxTextWidth) {
  1694.                   var11 += var15;
  1695.                } else {
  1696.                   if (var1.selected) {
  1697.                      this.field_1.setColor(this.textHighlight);
  1698.                      this.field_1.fillRect(var2 - 2, var3 - this.currheight + 4, var11 + var7 + 2, this.currheight);
  1699.                      this.field_1.setColor(this.textHighlightText);
  1700.                   } else {
  1701.                      this.field_1.setColor(this.back);
  1702.                      this.field_1.fillRect(var2 - 2, var3 - this.currheight + 4, var11 + 2, this.currheight);
  1703.                      this.field_1.setColor(this.textColor);
  1704.                   }
  1705.  
  1706.                   this.field_1.drawString(var9.toString() + "-", var2, var3);
  1707.                   var3 += this.currheight - 2;
  1708.                   var9.setLength(0);
  1709.                   ++var12;
  1710.                   var11 = var15;
  1711.                }
  1712.  
  1713.                var9.append(var16);
  1714.             }
  1715.  
  1716.             var13 = 0;
  1717.             var10 = "";
  1718.          }
  1719.  
  1720.          if (var11 + var13 > this.maxTextWidth) {
  1721.             if (var1.selected) {
  1722.                this.field_1.setColor(this.textHighlight);
  1723.                this.field_1.fillRect(var2 - 2, var3 - this.currheight + 4, var11 + 2, this.currheight);
  1724.                this.field_1.setColor(this.textHighlightText);
  1725.             } else {
  1726.                this.field_1.setColor(this.back);
  1727.                this.field_1.fillRect(var2 - 2, var3 - this.currheight + 4, var11 + 2, this.currheight);
  1728.                this.field_1.setColor(this.textColor);
  1729.             }
  1730.  
  1731.             this.field_1.drawString(var9.toString(), var2, var3);
  1732.             var3 += this.currheight - 2;
  1733.             var9.setLength(0);
  1734.             ++var12;
  1735.             var11 = 0;
  1736.          }
  1737.  
  1738.          var11 += var13;
  1739.          if (var9.length() > 0 || !var10.equals(" ")) {
  1740.             var9.append(var10);
  1741.          }
  1742.       }
  1743.  
  1744.       if (var9.length() > 0) {
  1745.          if (var1.selected) {
  1746.             this.field_1.setColor(this.textHighlight);
  1747.             this.field_1.fillRect(var2 - 2, var3 - this.currheight + 4, var11 + 2, this.currheight);
  1748.             this.field_1.setColor(this.textHighlightText);
  1749.          } else {
  1750.             this.field_1.setColor(this.back);
  1751.             this.field_1.fillRect(var2 - 2, var3 - this.currheight + 4, var11 + 2, this.currheight);
  1752.             this.field_1.setColor(this.textColor);
  1753.          }
  1754.  
  1755.          this.field_1.drawString(var9.toString(), var2, var3);
  1756.       }
  1757.  
  1758.       this.field_1.setColor(this.textColor);
  1759.    }
  1760. }
  1761.