home *** CD-ROM | disk | FTP | other *** search
/ PC Professionell 2003 July / PCpro_2003_07.ISO / vollvers / edhtml / EdHTMLv5.0.exe / Main / TreeCanvas.class (.txt) < prev    next >
Encoding:
Java Class File  |  2003-05-14  |  11.6 KB  |  772 lines

  1. import java.applet.Applet;
  2. import java.awt.Color;
  3. import java.awt.Component;
  4. import java.awt.Event;
  5. import java.awt.Font;
  6. import java.awt.FontMetrics;
  7. import java.awt.Graphics;
  8. import java.awt.Image;
  9. import java.awt.MediaTracker;
  10. import java.awt.Panel;
  11. import java.awt.image.CropImageFilter;
  12. import java.awt.image.FilteredImageSource;
  13. import java.util.Vector;
  14.  
  15. class TreeCanvas extends Panel {
  16.    ElementList m_list;
  17.    Color m_backColor;
  18.    Color m_textColor;
  19.    Color m_lineColor;
  20.    Color m_squareColor;
  21.    Color m_highlightText;
  22.    Color m_highlightBack;
  23.    Color m_highlightBackNoFocus;
  24.    int m_itemHeight;
  25.    int m_selectedItem;
  26.    int m_selectedItemA;
  27.    int m_oldSelection;
  28.    long m_dblClkTimer;
  29.    Image m_gBuff;
  30.    int m_state;
  31.    int m_top;
  32.    int m_oldTop;
  33.    Image offScrImg;
  34.    Image m_bgImage;
  35.    Image plusImg;
  36.    Image minusImg;
  37.    Image[] m_icons;
  38.    Font m_font;
  39.    int m_style;
  40.    int m_redrawMode;
  41.    int m_clickMode;
  42.    int m_maxWidth;
  43.    int m_hscrollPos;
  44.    private String m_loadedImgList;
  45.    private boolean m_locked;
  46.    private int m_fPlatform;
  47.    private int m_useFolders;
  48.    private long m_winStyle;
  49.    private long m_exWinStyle;
  50.    private int m_imageWidth;
  51.    boolean m_hasFocus;
  52.    boolean m_fRedraw;
  53.    Applet m_applet;
  54.    TreeView m_tview;
  55.    static int STATE_NONE;
  56.    static int STATE_NEWSEL = 1;
  57.    static int STATE_UPDATING = 2;
  58.    static int STATE_SYNC = 3;
  59.    public static int TIME_DBLCLICK = 350;
  60.    private boolean fShowSplash;
  61.    static int m_lastOver = -1;
  62.    private Image[] imgArray;
  63.  
  64.    public boolean mouseMove(Event var1, int var2, int var3) {
  65.       int var4 = var3 / this.m_itemHeight + this.m_top;
  66.       if (var4 != m_lastOver) {
  67.          if (var4 < this.m_list.numVisible()) {
  68.             m_lastOver = var4;
  69.             Element var5 = (Element)this.m_list.elementAt(this.m_list.nthVisible(var4));
  70.             if (var5.m_text.compareTo("") != 0) {
  71.                if (var5.m_url.compareTo("") != 0) {
  72.                   this.m_applet.showStatus(var5.m_text + " (" + var5.m_url + ")");
  73.                } else {
  74.                   this.m_applet.showStatus(var5.m_text);
  75.                }
  76.             }
  77.          } else {
  78.             this.m_applet.showStatus("");
  79.          }
  80.       }
  81.  
  82.       return true;
  83.    }
  84.  
  85.    public void setSelectedItem2(int var1) {
  86.       this.m_oldSelection = this.m_selectedItem;
  87.       this.m_selectedItem = var1;
  88.       this.m_selectedItemA = this.m_list.nthVisible(this.m_selectedItem);
  89.    }
  90.  
  91.    public void setStyles(long var1, long var3) {
  92.       this.m_winStyle = var1;
  93.       this.m_exWinStyle = var3;
  94.       if ((var3 & 1L) == 0L && (var3 & 4L) == 0L) {
  95.          this.m_style = TreeView.STYLE_NORMAL;
  96.          this.m_clickMode = 1;
  97.       } else if ((var3 & 4L) == 0L) {
  98.          this.m_style = TreeView.STYLE_EXPLORER;
  99.          this.m_clickMode = 0;
  100.       } else {
  101.          this.m_style = TreeView.STYLE_WIN95;
  102.          this.m_clickMode = 0;
  103.       }
  104.  
  105.       ((Component)this).repaint();
  106.    }
  107.  
  108.    public void setBackgroundImage(Image var1) {
  109.       this.m_bgImage = var1;
  110.    }
  111.  
  112.    public int getMaxWidth() {
  113.       this.m_maxWidth = 0;
  114.       if (this.offScrImg == null) {
  115.          this.offScrImg = ((Component)this).createImage(((Component)this).size().width + 20, ((Component)this).size().height);
  116.       }
  117.  
  118.       for(int var2 = 0; var2 < this.m_list.size(); ++var2) {
  119.          Element var1 = (Element)this.m_list.elementAt(var2);
  120.          if (var1.isVisible() && var1.m_textWidth > this.m_maxWidth) {
  121.             this.m_maxWidth = var1.m_textWidth;
  122.          }
  123.       }
  124.  
  125.       return this.m_maxWidth;
  126.    }
  127.  
  128.    public void setRedrawMode(int var1) {
  129.       if (var1 >= 1 && var1 <= 2) {
  130.          this.m_redrawMode = var1;
  131.       }
  132.    }
  133.  
  134.    public int calcMaxWidth() {
  135.       Font var4 = this.m_font;
  136.       this.m_maxWidth = 0;
  137.       if (this.offScrImg == null) {
  138.          this.offScrImg = ((Component)this).createImage(((Component)this).size().width + 20, Math.max(((Component)this).size().height, 10));
  139.       }
  140.  
  141.       Graphics var6 = this.offScrImg.getGraphics();
  142.  
  143.       for(int var7 = 0; var7 < this.m_list.size(); ++var7) {
  144.          Element var5 = (Element)this.m_list.elementAt(var7);
  145.          int var2 = var5.m_level;
  146.          if (this.m_style == TreeView.STYLE_WIN95) {
  147.             ++var2;
  148.          }
  149.  
  150.          int var3 = var5.m_textWidth;
  151.          if (var3 == 0) {
  152.             var6.setFont(var4);
  153.             FontMetrics var8 = var6.getFontMetrics();
  154.             var3 = var8.stringWidth(var5.m_text) + var2 * this.m_itemHeight + 35;
  155.             var5.m_textWidth = var3;
  156.          }
  157.  
  158.          if (var3 > this.m_maxWidth) {
  159.             this.m_maxWidth = var3;
  160.          }
  161.       }
  162.  
  163.       var6.dispose();
  164.       return this.m_maxWidth;
  165.    }
  166.  
  167.    public void setSelectedItem(int var1) {
  168.       this.m_oldSelection = this.m_selectedItem;
  169.       this.m_selectedItem = var1 / this.m_itemHeight + this.m_top;
  170.       this.m_selectedItemA = this.m_list.nthVisible(this.m_selectedItem);
  171.    }
  172.  
  173.    public void setStyle(int var1) {
  174.       if (var1 >= 0 && var1 <= 2) {
  175.          this.m_style = var1;
  176.       }
  177.    }
  178.  
  179.    public boolean mouseDblClk(Event var1, int var2, int var3, boolean var4) {
  180.       boolean var5 = false;
  181.       int var6 = this.m_list.nthVisible(var3 / this.m_itemHeight + this.m_top);
  182.       if ((this.m_clickMode != 1 || !var4 || this.m_fPlatform != 0) && this.m_list.hasChildren(var6)) {
  183.          if (this.m_list.hasVisibleChildren(var6)) {
  184.             this.m_list.hideChildren(var6);
  185.          } else {
  186.             this.m_list.showChildren(var6);
  187.             var5 = true;
  188.          }
  189.  
  190.          this.m_maxWidth = 0;
  191.       }
  192.  
  193.       this.m_state = STATE_NONE;
  194.       if (var4) {
  195.          Event var7 = new Event(this, 1001, this.m_list.elementAt(this.m_list.nthVisible(var3 / this.m_itemHeight + this.m_top)));
  196.          ((Component)this).getParent().postEvent(var7);
  197.       }
  198.  
  199.       boolean var9 = !this.m_tview.setVScroll();
  200.       if (this.m_tview.setHScroll()) {
  201.          var9 = !this.m_tview.setVScroll();
  202.       }
  203.  
  204.       if (this.m_list.numVisible() - this.m_top < ((Component)this).size().height / this.m_itemHeight && this.m_list.numVisible() > ((Component)this).size().height / this.m_itemHeight) {
  205.          int var8 = this.m_top;
  206.          this.m_top = this.m_list.numVisible() - ((Component)this).size().height / this.m_itemHeight;
  207.          TreeView var10000 = this.m_tview;
  208.          var10000.m_scrollPos += this.m_top - var8;
  209.          this.m_oldTop = this.m_top;
  210.       }
  211.  
  212.       if (var5) {
  213.          int var11 = 0;
  214.          this.m_list.countChildren(var6);
  215.          if (var3 / this.m_itemHeight + this.m_list.countChildren(var6) + 1 > ((Component)this).size().height / this.m_itemHeight) {
  216.             var11 = ((Component)this).size().height / this.m_itemHeight - this.m_list.countChildren(var6) - var3 / this.m_itemHeight - 1;
  217.             if (Math.abs(var11) > var3 / this.m_itemHeight) {
  218.                var11 = -var3 / this.m_itemHeight;
  219.             }
  220.  
  221.             this.m_tview.scrollUp(var11);
  222.             this.m_oldTop = this.m_top;
  223.          }
  224.       }
  225.  
  226.       return true;
  227.    }
  228.  
  229.    public void setList(ElementList var1) {
  230.       this.m_list = var1;
  231.       if (((Vector)var1).size() > 1) {
  232.          this.fShowSplash = false;
  233.       }
  234.  
  235.       this.calcMaxWidth();
  236.       this.m_selectedItem = 0;
  237.       this.m_selectedItemA = 0;
  238.       this.m_oldSelection = 0;
  239.       this.m_top = 0;
  240.       if (((Vector)var1).size() == 1) {
  241.          this.setImageList((String)null, 16, false);
  242.       }
  243.  
  244.    }
  245.  
  246.    public void update(Graphics var1) {
  247.       boolean var2 = true;
  248.       if (this.m_fRedraw) {
  249.          if (this.offScrImg == null) {
  250.             this.offScrImg = ((Component)this).createImage(((Component)this).size().width + 20, ((Component)this).size().height);
  251.             var2 = false;
  252.          }
  253.  
  254.          Graphics var3 = this.offScrImg.getGraphics();
  255.          if (this.m_state == STATE_SYNC) {
  256.             var2 = false;
  257.             this.m_state = STATE_NONE;
  258.          }
  259.  
  260.          if (this.m_state == STATE_NEWSEL) {
  261.             if (this.m_oldSelection != this.m_selectedItem) {
  262.                var1.clipRect(0, (Math.min(this.m_oldSelection, this.m_selectedItem) - this.m_top) * this.m_itemHeight, ((Component)this).size().width, (Math.abs(this.m_oldSelection - this.m_selectedItem) + 1) * this.m_itemHeight);
  263.             } else {
  264.                var1.clipRect(0, 0, 0, 0);
  265.             }
  266.  
  267.             this.imgPaint(var3, var2);
  268.             this.m_state = STATE_NONE;
  269.          } else {
  270.             this.imgPaint(var3, var2);
  271.          }
  272.  
  273.          var1.drawImage(this.offScrImg, 0, 0, this);
  274.          var3.dispose();
  275.       }
  276.    }
  277.  
  278.    private void drawDashedVertLine(Graphics var1, int var2, int var3, int var4, boolean var5) {
  279.       if (var2 % 2 != 0 && var5) {
  280.          --var2;
  281.       }
  282.  
  283.       for(int var6 = 0; var6 <= var4 - var3; ++var6) {
  284.          if ((var3 + var6) % 2 == 0) {
  285.             var1.drawLine(var2, var3 + var6, var2, var3 + var6);
  286.          }
  287.       }
  288.  
  289.    }
  290.  
  291.    public void setItemHeight(int var1) {
  292.       this.m_itemHeight = var1;
  293.    }
  294.  
  295.    public void setImageList(String var1, int var2, boolean var3) {
  296.       this.m_imageWidth = var2;
  297.       if (var1 == null) {
  298.          var1 = "cntimage.gif";
  299.       }
  300.  
  301.       if (var3) {
  302.          this.m_useFolders = 4;
  303.       }
  304.  
  305.       if (this.m_loadedImgList == null || !var1.equalsIgnoreCase(this.m_loadedImgList)) {
  306.          try {
  307.             Image var4 = this.getImageStrip(var1, true);
  308.             if (var4 == null) {
  309.                var4 = this.getImageStrip(var1, false);
  310.             }
  311.  
  312.             if (var4 == null) {
  313.                byte var11 = 24;
  314.                var2 = 16;
  315.                this.m_imageWidth = 16;
  316.                this.imgArray = new Image[var11];
  317.                this.m_applet.createImage(480, var2);
  318.  
  319.                for(int var12 = 0; var12 < var11; ++var12) {
  320.                   this.imgArray[var12] = this.m_applet.createImage(var2, 16);
  321.                   Graphics var5 = this.imgArray[var12].getGraphics();
  322.                   var5.setColor(this.m_backColor);
  323.                   var5.fillRect(0, 0, var2, 16);
  324.                   var5.setColor(Color.black);
  325.                   var5.drawRect(0, 0, 15, 15);
  326.                   var5.dispose();
  327.                }
  328.  
  329.             } else {
  330.                var4.getHeight(this.m_applet);
  331.                int var6 = var4.getWidth(this.m_applet) / var2;
  332.                this.imgArray = new Image[var6];
  333.  
  334.                for(int var8 = 0; var8 < var6; ++var8) {
  335.                   this.imgArray[var8] = ((Component)this).createImage(new FilteredImageSource(var4.getSource(), new CropImageFilter(var8 * var2, 0, var2, 16)));
  336.                }
  337.  
  338.                this.m_loadedImgList = var1;
  339.             }
  340.          } catch (Exception var9) {
  341.          }
  342.       }
  343.    }
  344.  
  345.    public synchronized void clearLock() {
  346.       this.m_locked = false;
  347.    }
  348.  
  349.    public void setClickMode(int var1) {
  350.       if (var1 >= 0 && var1 <= 1) {
  351.          this.m_clickMode = var1;
  352.       }
  353.    }
  354.  
  355.    public boolean setSelectedItemA(int var1) {
  356.       this.m_oldSelection = this.m_selectedItem;
  357.       if (((Element)this.m_list.elementAt(var1)).isVisible()) {
  358.          this.m_selectedItemA = var1;
  359.          this.m_selectedItem = this.m_list.whichVisible(var1) - 1;
  360.          return true;
  361.       } else {
  362.          return false;
  363.       }
  364.    }
  365.  
  366.    public synchronized void setLock() {
  367.       this.m_locked = true;
  368.    }
  369.  
  370.    public boolean mouseExit(Event var1, int var2, int var3) {
  371.       this.m_applet.showStatus("");
  372.       return true;
  373.    }
  374.  
  375.    public void setBackground(Color var1) {
  376.       this.m_backColor = var1;
  377.       this.createPlusMinus();
  378.    }
  379.  
  380.    public void syncSelectedItem() {
  381.       this.m_selectedItem = this.m_list.whichVisible(this.m_selectedItemA) - 1;
  382.    }
  383.  
  384.    public void paint(Graphics var1) {
  385.       boolean var2 = true;
  386.       if (this.m_fRedraw) {
  387.          if (this.offScrImg == null || this.offScrImg.getWidth(this) < ((Component)this).size().width || this.offScrImg.getHeight(this) < ((Component)this).size().height) {
  388.             this.offScrImg = ((Component)this).createImage(((Component)this).size().width + 20, ((Component)this).size().height);
  389.             var2 = false;
  390.          }
  391.  
  392.          Graphics var3 = this.offScrImg.getGraphics();
  393.          if (this.m_state == STATE_SYNC) {
  394.             var2 = false;
  395.             this.m_state = STATE_NONE;
  396.          }
  397.  
  398.          this.imgPaint(var3, var2);
  399.          var1.drawImage(this.offScrImg, 0, 0, this);
  400.          var3.dispose();
  401.       }
  402.    }
  403.  
  404.    private void drawDashedHorzLine(Graphics var1, int var2, int var3, int var4, boolean var5) {
  405.       if (var3 % 2 != 0 && var5) {
  406.          --var3;
  407.       }
  408.  
  409.       for(int var6 = 0; var6 <= var4 - var2; ++var6) {
  410.          if ((var2 + var6) % 2 == 0) {
  411.             var1.drawLine(var2 + var6, var3, var2 + var6, var3);
  412.          }
  413.       }
  414.  
  415.    }
  416.  
  417.    public void setHScroll(int var1) {
  418.       this.m_hscrollPos = var1;
  419.    }
  420.  
  421.    public void setTop(int var1) {
  422.       this.setTop(var1, true);
  423.    }
  424.  
  425.    private void createPlusMinus() {
  426.       if (this.plusImg == null) {
  427.          this.plusImg = ((Component)this).createImage(9, 9);
  428.       }
  429.  
  430.       if (this.minusImg == null) {
  431.          this.minusImg = ((Component)this).createImage(9, 9);
  432.       }
  433.  
  434.       Graphics var1 = this.plusImg.getGraphics();
  435.       var1.setColor(this.m_backColor);
  436.       var1.fillRect(0, 0, this.plusImg.getWidth(this), this.plusImg.getHeight(this));
  437.       this.drawPlus(var1, 0, 0);
  438.       var1.dispose();
  439.       var1 = this.minusImg.getGraphics();
  440.       var1.setColor(this.m_backColor);
  441.       var1.fillRect(0, 0, this.plusImg.getWidth(this), this.plusImg.getHeight(this));
  442.       this.drawMinus(var1, 0, 0);
  443.       var1.dispose();
  444.    }
  445.  
  446.    private void drawPlus(Graphics var1, int var2, int var3) {
  447.       var1.setColor(this.m_squareColor);
  448.       var1.drawRect(var2, var3, 8, 8);
  449.       var1.setColor(this.m_lineColor);
  450.       var1.drawLine(var2 + 2, var3 + 4, var2 + 6, var3 + 4);
  451.       var1.drawLine(var2 + 4, var3 + 2, var2 + 4, var3 + 6);
  452.    }
  453.  
  454.    private void drawMinus(Graphics var1, int var2, int var3) {
  455.       var1.setColor(this.m_squareColor);
  456.       var1.drawRect(var2, var3, 8, 8);
  457.       var1.setColor(this.m_lineColor);
  458.       var1.drawLine(var2 + 2, var3 + 4, var2 + 6, var3 + 4);
  459.    }
  460.  
  461.    public void setTop(int var1, boolean var2) {
  462.       this.m_top = var1;
  463.       if (var2) {
  464.          ((Component)this).repaint();
  465.       }
  466.  
  467.    }
  468.  
  469.    private Image getImageStrip(String var1, boolean var2) {
  470.       try {
  471.          Image var3 = this.m_applet.getImage(var2 ? this.m_applet.getCodeBase() : this.m_applet.getDocumentBase(), var1);
  472.          this.m_applet.prepareImage(var3, this.m_applet);
  473.          MediaTracker var4 = new MediaTracker(this.m_applet);
  474.          var4.addImage(var3, 0);
  475.          var4.waitForID(0);
  476.          return var4.isErrorAny() ? null : var3;
  477.       } catch (Exception var5) {
  478.          return null;
  479.       }
  480.    }
  481.  
  482.    public void setFont(Font var1, Color var2) {
  483.       if (var1 != null && var1 instanceof Font) {
  484.          this.m_font = var1;
  485.       }
  486.  
  487.       this.m_textColor = var2;
  488.    }
  489.  
  490.    public void setExWinStyle(long var1) {
  491.       this.m_exWinStyle = var1;
  492.    }
  493.  
  494.    public boolean mouseDown(Event var1, int var2, int var3) {
  495.       boolean var4 = true;
  496.       if (var3 / this.m_itemHeight + this.m_top > this.m_list.numVisible() - 1) {
  497.          return true;
  498.       } else {
  499.          Element var5 = (Element)this.m_list.elementAt(this.m_list.nthVisible(var3 / this.m_itemHeight + this.m_top));
  500.          if (this.m_clickMode == 1 && !this.m_locked) {
  501.             if ((var2 <= var5.m_level * this.m_itemHeight - this.m_hscrollPos || var2 >= (var5.m_level + 1) * this.m_itemHeight - this.m_hscrollPos || this.m_style != TreeView.STYLE_WIN95) && (var2 <= (var5.m_level - 1) * this.m_itemHeight - this.m_hscrollPos || var2 >= var5.m_level * this.m_itemHeight - this.m_hscrollPos || this.m_style != TreeView.STYLE_EXPLORER) && var1.clickCount != 2) {
  502.                this.m_state = STATE_NEWSEL;
  503.                this.setSelectedItem(var3);
  504.                var4 = this.mouseDblClk(var1, var2, var3, true);
  505.             } else {
  506.                int var8 = var3 / this.m_itemHeight + this.m_top;
  507.                int var9 = this.m_list.nthVisible(var8);
  508.                var4 = this.mouseDblClk(var1, var2, var3, false);
  509.                if (!((Element)this.m_list.elementAt(this.m_selectedItemA)).isVisible()) {
  510.                   this.m_oldSelection = this.m_selectedItem;
  511.                   this.m_selectedItemA = var9;
  512.                }
  513.  
  514.                this.syncSelectedItem();
  515.             }
  516.          } else if (!this.m_locked) {
  517.             if (var5.m_url.compareTo("") != 0) {
  518.                this.m_applet.showStatus(var5.m_url);
  519.             } else {
  520.                this.m_applet.showStatus(var5.m_text);
  521.             }
  522.  
  523.             if ((var2 > var5.m_level * this.m_itemHeight - this.m_hscrollPos && var2 < (var5.m_level + 1) * this.m_itemHeight - this.m_hscrollPos && this.m_style == TreeView.STYLE_WIN95 || var2 > (var5.m_level - 1) * this.m_itemHeight - this.m_hscrollPos && var2 < var5.m_level * this.m_itemHeight - this.m_hscrollPos && this.m_style == TreeView.STYLE_EXPLORER) && !this.m_locked) {
  524.                int var6 = var3 / this.m_itemHeight + this.m_top;
  525.                int var7 = this.m_list.nthVisible(var6);
  526.                var4 = this.mouseDblClk(var1, var2, var3, false);
  527.                if (!((Element)this.m_list.elementAt(this.m_selectedItemA)).isVisible()) {
  528.                   this.m_oldSelection = this.m_selectedItem;
  529.                   this.m_selectedItemA = var7;
  530.                }
  531.  
  532.                this.syncSelectedItem();
  533.             } else {
  534.                this.m_state = STATE_NEWSEL;
  535.                this.setSelectedItem(var3);
  536.             }
  537.          }
  538.  
  539.          if (var4) {
  540.             if (this.m_redrawMode == 1) {
  541.                ((Component)this).repaint();
  542.             } else {
  543.                ((Component)this).repaint((long)(TIME_DBLCLICK + 20));
  544.             }
  545.          }
  546.  
  547.          return true;
  548.       }
  549.    }
  550.  
  551.    TreeCanvas() {
  552.       this.m_backColor = Color.white;
  553.       this.m_textColor = Color.black;
  554.       this.m_lineColor = Color.black;
  555.       this.m_squareColor = Color.gray;
  556.       this.m_highlightText = Color.white;
  557.       this.m_highlightBack = new Color(0, 0, 128);
  558.       this.m_highlightBackNoFocus = Color.gray;
  559.       this.m_itemHeight = 16;
  560.       this.m_redrawMode = 1;
  561.       this.m_imageWidth = 16;
  562.       this.m_fRedraw = true;
  563.    }
  564.  
  565.    TreeCanvas(ElementList var1, Applet var2, TreeView var3) {
  566.       this.m_backColor = Color.white;
  567.       this.m_textColor = Color.black;
  568.       this.m_lineColor = Color.black;
  569.       this.m_squareColor = Color.gray;
  570.       this.m_highlightText = Color.white;
  571.       this.m_highlightBack = new Color(0, 0, 128);
  572.       this.m_highlightBackNoFocus = Color.gray;
  573.       this.m_itemHeight = 16;
  574.       this.m_redrawMode = 1;
  575.       this.m_imageWidth = 16;
  576.       this.m_fRedraw = true;
  577.       this.m_list = var1;
  578.       this.m_applet = var2;
  579.       this.m_tview = var3;
  580.       this.m_icons = new Image[20];
  581.       this.m_font = new Font("MS Sans Serif", 0, 12);
  582.       this.m_fPlatform = System.getProperty("java.vendor").compareTo("Microsoft Corp.");
  583.    }
  584.  
  585.    public void imgPaint(Graphics var1, boolean var2) {
  586.       try {
  587.          if (this.plusImg == null || this.minusImg == null) {
  588.             this.createPlusMinus();
  589.          }
  590.  
  591.          var1.setPaintMode();
  592.          int var13 = 0;
  593.          int var14 = Math.min(((Component)this).size().height / this.m_itemHeight + 1, this.m_list.numVisible());
  594.          if (var2 && this.m_bgImage == null && this.m_oldTop != this.m_top) {
  595.             int var10006 = this.m_oldTop - this.m_top;
  596.             var1.copyArea(0, 0, ((Component)this).size().width, ((Component)this).size().height, 0, var10006 * this.m_itemHeight);
  597.             var1.setColor(this.m_backColor);
  598.             if (this.m_top > this.m_oldTop) {
  599.                var13 = var14 - (this.m_top - this.m_oldTop) - 1;
  600.                var1.fillRect(0, var13 * this.m_itemHeight, ((Component)this).size().width, (var14 - var13) * this.m_itemHeight);
  601.             } else {
  602.                var14 = this.m_oldTop - this.m_top;
  603.                int var10004 = var14 * this.m_itemHeight;
  604.                var1.fillRect(0, 0, ((Component)this).size().width, var10004);
  605.             }
  606.  
  607.             this.m_oldTop = this.m_top;
  608.          } else {
  609.             var1.setColor(this.m_backColor);
  610.             var1.fillRect(0, 0, ((Component)this).size().width, ((Component)this).size().height);
  611.             if (this.m_bgImage != null) {
  612.                try {
  613.                   if (this.m_bgImage.getWidth(this) != -1 && this.m_bgImage.getHeight(this) != -1) {
  614.                      for(int var16 = 0; var16 < ((Component)this).size().width; var16 += this.m_bgImage.getWidth(this)) {
  615.                         var1.drawImage(this.m_bgImage, var16, 0, this.m_backColor, this);
  616.  
  617.                         for(int var15 = 0; var15 < ((Component)this).size().height; var15 += this.m_bgImage.getHeight(this)) {
  618.                            var1.drawImage(this.m_bgImage, var16, var15, this.m_backColor, this);
  619.                         }
  620.                      }
  621.                   }
  622.                } catch (Exception var18) {
  623.                }
  624.             }
  625.          }
  626.  
  627.          var1.setColor(this.m_lineColor);
  628.  
  629.          for(int var23 = var13; var23 < var14; ++var23) {
  630.             int var4 = var23 + this.m_top;
  631.             if (var4 >= this.m_list.numVisible()) {
  632.                break;
  633.             }
  634.  
  635.             int var6 = this.m_list.nthVisible(var4);
  636.             Element var3 = (Element)this.m_list.elementAt(var6);
  637.             if (var3.isVisible()) {
  638.                int var7 = var3.m_level;
  639.                if (this.m_style == TreeView.STYLE_WIN95) {
  640.                   ++var7;
  641.                }
  642.  
  643.                var1.setFont(this.m_font);
  644.                FontMetrics var24 = var1.getFontMetrics();
  645.                int var12;
  646.                if (var3.m_imgNum < 0) {
  647.                   var12 = 10;
  648.                   if (this.m_list.hasChildren(var6)) {
  649.                      var12 = 0;
  650.                      if (this.m_list.hasVisibleChildren(var6)) {
  651.                         var12 = 1;
  652.                      }
  653.  
  654.                      if (var3.m_isNew == 1) {
  655.                         var12 += 2;
  656.                      }
  657.  
  658.                      var12 += this.m_useFolders;
  659.                   } else if (var3.m_isNew == 1) {
  660.                      ++var12;
  661.                   }
  662.                } else {
  663.                   var12 = var3.m_imgNum;
  664.                }
  665.  
  666.                if (this.imgArray[var12] != null) {
  667.                   var1.drawImage(this.imgArray[var12], var7 * this.m_itemHeight - this.m_hscrollPos, var23 * this.m_itemHeight, this);
  668.                }
  669.  
  670.                if (this.m_selectedItem == var4) {
  671.                   if (this.m_hasFocus) {
  672.                      var1.setColor(this.m_highlightBack);
  673.                   } else {
  674.                      var1.setColor(this.m_highlightBackNoFocus);
  675.                   }
  676.  
  677.                   int var10 = var7 * this.m_itemHeight + this.m_imageWidth + 3 - this.m_hscrollPos;
  678.                   int var11 = var23 * this.m_itemHeight;
  679.                   var1.fillRect(var10 + 1, var11 + 1, var24.stringWidth(var3.m_text) + 3, this.m_itemHeight - 2);
  680.                   var1.setColor(this.m_lineColor);
  681.                   if (this.m_hasFocus) {
  682.                      this.drawDashedVertLine(var1, var10, var11, var11 + this.m_itemHeight - 1, false);
  683.                      this.drawDashedVertLine(var1, var10 + var24.stringWidth(var3.m_text) + 4, var11, var11 + this.m_itemHeight - 1, false);
  684.                      this.drawDashedHorzLine(var1, var10, var11, var10 + var24.stringWidth(var3.m_text) + 4, false);
  685.                      this.drawDashedHorzLine(var1, var10, var11 + this.m_itemHeight - 1, var10 + var24.stringWidth(var3.m_text) + 4, false);
  686.                   }
  687.  
  688.                   if (this.m_hasFocus) {
  689.                      var1.setColor(this.m_highlightText);
  690.                   } else {
  691.                      var1.setColor(this.m_textColor);
  692.                   }
  693.                } else {
  694.                   var1.setColor(this.m_textColor);
  695.                }
  696.  
  697.                var1.drawString(var3.m_text, var7 * this.m_itemHeight + this.m_imageWidth + 5 - this.m_hscrollPos, (var23 + 1) * this.m_itemHeight - var24.getMaxDescent() - 1);
  698.                var1.setColor(this.m_lineColor);
  699.                if ((this.m_exWinStyle & 2L) == 2L) {
  700.                   for(int var17 = this.m_style == TreeView.STYLE_WIN95 ? 0 : 0; var17 < var7; ++var17) {
  701.                      if (this.m_list.moreVisibleAtLevel(this.m_style == TreeView.STYLE_WIN95 ? var17 : var17 + 1, this.m_list.nthVisible(var23 + this.m_top))) {
  702.                         if (this.m_list.indexOf(var3) > 0) {
  703.                            this.drawDashedVertLine(var1, var17 * this.m_itemHeight + this.m_itemHeight / 2 - this.m_hscrollPos, var23 * this.m_itemHeight, (var23 + 1) * this.m_itemHeight, true);
  704.                         } else {
  705.                            this.drawDashedVertLine(var1, var17 * this.m_itemHeight + this.m_itemHeight / 2 - this.m_hscrollPos, var23 * this.m_itemHeight + this.m_itemHeight / 2 - 1, (var23 + 1) * this.m_itemHeight, true);
  706.                         }
  707.                      }
  708.                   }
  709.  
  710.                   if (var7 > 0) {
  711.                      int var20 = (var7 - 1) * this.m_itemHeight + this.m_itemHeight / 2 - this.m_hscrollPos;
  712.                      int var21 = var23 * this.m_itemHeight;
  713.                      if (this.m_list.indexOf(var3) > 0) {
  714.                         if (this.m_list.moreVisibleAtLevel(var3.m_level, this.m_list.nthVisible(var23 + this.m_top))) {
  715.                            this.drawDashedVertLine(var1, var20, var21, var21 + this.m_itemHeight, true);
  716.                         } else {
  717.                            this.drawDashedVertLine(var1, var20, var21, var21 + this.m_itemHeight / 2, true);
  718.                         }
  719.                      }
  720.  
  721.                      this.drawDashedHorzLine(var1, var20, var21 + this.m_itemHeight / 2, var20 + this.m_itemHeight / 2, true);
  722.                   }
  723.                }
  724.  
  725.                if (this.m_style == TreeView.STYLE_WIN95 || this.m_style == TreeView.STYLE_EXPLORER) {
  726.                   int var5 = this.m_list.nthVisible(var4);
  727.                   if (var7 > 0 && this.m_list.hasChildren(var5)) {
  728.                      int var8 = (var7 - 1) * this.m_itemHeight + (this.m_itemHeight / 2 - 4) - this.m_hscrollPos;
  729.                      if (var8 % 2 != 0) {
  730.                         --var8;
  731.                      }
  732.  
  733.                      int var9 = var23 * this.m_itemHeight + (this.m_itemHeight / 2 - 4);
  734.                      if (var9 % 2 != 0) {
  735.                         --var9;
  736.                      }
  737.  
  738.                      if (!this.m_list.hasVisibleChildren(var5)) {
  739.                         if (this.m_bgImage == null) {
  740.                            var1.drawImage(this.plusImg, var8, var9, this);
  741.                         } else {
  742.                            this.drawPlus(var1, var8, var9);
  743.                         }
  744.                      } else if (this.m_bgImage == null) {
  745.                         var1.drawImage(this.minusImg, var8, var9, this);
  746.                      } else {
  747.                         this.drawMinus(var1, var8, var9);
  748.                      }
  749.                   }
  750.                }
  751.             }
  752.          }
  753.       } catch (Exception var19) {
  754.       }
  755.  
  756.       this.m_oldTop = this.m_top;
  757.    }
  758.  
  759.    public void setColors(Color var1, Color var2, Color var3, Color var4, Color var5) {
  760.       this.m_textColor = var1;
  761.       this.m_lineColor = var2;
  762.       this.m_highlightBack = var4;
  763.       this.m_highlightText = var5;
  764.       this.m_squareColor = var3;
  765.       this.createPlusMinus();
  766.    }
  767.  
  768.    public void setWinStyle(long var1) {
  769.       this.m_winStyle = var1;
  770.    }
  771. }
  772.