home *** CD-ROM | disk | FTP | other *** search
/ PC Plus SuperCD (UK) 2000 March / pcp161a.iso / handson / files / copyjava.exe / com / sun / java / swing / JTree.class (.txt) < prev    next >
Encoding:
Java Class File  |  1998-02-26  |  18.9 KB  |  920 lines

  1. package com.sun.java.swing;
  2.  
  3. import com.sun.java.accessibility.Accessible;
  4. import com.sun.java.accessibility.AccessibleContext;
  5. import com.sun.java.accessibility.AccessibleState;
  6. import com.sun.java.swing.event.TreeExpansionEvent;
  7. import com.sun.java.swing.event.TreeExpansionListener;
  8. import com.sun.java.swing.event.TreeSelectionEvent;
  9. import com.sun.java.swing.event.TreeSelectionListener;
  10. import com.sun.java.swing.plaf.TreeUI;
  11. import com.sun.java.swing.tree.DefaultMutableTreeNode;
  12. import com.sun.java.swing.tree.DefaultTreeModel;
  13. import com.sun.java.swing.tree.DefaultTreeSelectionModel;
  14. import com.sun.java.swing.tree.TreeCellEditor;
  15. import com.sun.java.swing.tree.TreeCellRenderer;
  16. import com.sun.java.swing.tree.TreeModel;
  17. import com.sun.java.swing.tree.TreeNode;
  18. import com.sun.java.swing.tree.TreePath;
  19. import com.sun.java.swing.tree.TreeSelectionModel;
  20. import java.awt.AWTEvent;
  21. import java.awt.Component;
  22. import java.awt.Container;
  23. import java.awt.Dimension;
  24. import java.awt.LayoutManager;
  25. import java.awt.Point;
  26. import java.awt.Rectangle;
  27. import java.awt.event.InputEvent;
  28. import java.awt.event.MouseEvent;
  29. import java.io.IOException;
  30. import java.io.ObjectInputStream;
  31. import java.io.ObjectOutputStream;
  32. import java.io.Serializable;
  33. import java.util.Hashtable;
  34. import java.util.Vector;
  35.  
  36. public class JTree extends JComponent implements Scrollable, Accessible {
  37.    protected transient TreeModel treeModel;
  38.    protected transient TreeSelectionModel selectionModel;
  39.    protected boolean rootVisible;
  40.    protected transient TreeCellRenderer cellRenderer;
  41.    protected int rowHeight;
  42.    protected boolean showsRootHandles;
  43.    protected TreeSelectionRedirector selectionRedirector;
  44.    protected transient TreeCellEditor cellEditor;
  45.    protected boolean editable;
  46.    protected boolean largeModel;
  47.    protected int visibleRowCount;
  48.    protected boolean invokesStopCellEditing;
  49.    public static final String CELL_RENDERER_PROPERTY = "cellRenderer";
  50.    public static final String TREE_MODEL_PROPERTY = "treeModel";
  51.    public static final String ROOT_VISIBLE_PROPERTY = "rootVisible";
  52.    public static final String SHOWS_ROOT_HANDLES_PROPERTY = "showsRootHandles";
  53.    public static final String ROW_HEIGHT_PROPERTY = "rowHeight";
  54.    public static final String CELL_EDITOR_PROPERTY = "cellEditor";
  55.    public static final String EDITABLE_PROPERTY = "editable";
  56.    public static final String LARGE_MODEL_PROPERTY = "largeModel";
  57.    public static final String SELECTION_MODEL_PROPERTY = "selectionModel";
  58.    public static final String VISIBLE_ROW_COUNT_PROPERTY = "visibleRowCount";
  59.    public static final String INVOKES_STOP_CELL_EDITING_PROPERTY = "messagesStopCellEditing";
  60.    // $FF: synthetic field
  61.    static Class class$com$sun$java$swing$event$TreeExpansionListener;
  62.    // $FF: synthetic field
  63.    static Class class$com$sun$java$swing$event$TreeSelectionListener;
  64.  
  65.    protected static TreeModel getDefaultTreeModel() {
  66.       DefaultMutableTreeNode var0 = new DefaultMutableTreeNode("root");
  67.       DefaultMutableTreeNode var2 = new DefaultMutableTreeNode("swing");
  68.       var0.add(var2);
  69.       DefaultMutableTreeNode var1 = var2;
  70.       var2 = new DefaultMutableTreeNode("is");
  71.       var1.add(var2);
  72.       var1 = var2;
  73.       var2 = new DefaultMutableTreeNode("cool");
  74.       var1.add(var2);
  75.       return new DefaultTreeModel(var0);
  76.    }
  77.  
  78.    protected static TreeModel createTreeModel(Object var0) {
  79.       Object var1;
  80.       if (!(var0 instanceof Object[]) && !(var0 instanceof Hashtable) && !(var0 instanceof Vector)) {
  81.          var1 = new DynamicUtilTreeNode("root", var0);
  82.       } else {
  83.          var1 = new DefaultMutableTreeNode("root");
  84.          com.sun.java.swing.JTree.DynamicUtilTreeNode.createChildren((DefaultMutableTreeNode)var1, var0);
  85.       }
  86.  
  87.       return new DefaultTreeModel((TreeNode)var1, false);
  88.    }
  89.  
  90.    public JTree() {
  91.       this(getDefaultTreeModel());
  92.    }
  93.  
  94.    public JTree(Object[] var1) {
  95.       this(createTreeModel(var1));
  96.       this.setRootVisible(false);
  97.       this.setShowsRootHandles(true);
  98.    }
  99.  
  100.    public JTree(Vector var1) {
  101.       this(createTreeModel(var1));
  102.       this.setRootVisible(false);
  103.       this.setShowsRootHandles(true);
  104.    }
  105.  
  106.    public JTree(Hashtable var1) {
  107.       this(createTreeModel(var1));
  108.       this.setRootVisible(false);
  109.       this.setShowsRootHandles(true);
  110.    }
  111.  
  112.    public JTree(TreeNode var1) {
  113.       this(var1, false);
  114.    }
  115.  
  116.    public JTree(TreeNode var1, boolean var2) {
  117.       this((TreeModel)(new DefaultTreeModel(var1, var2)));
  118.    }
  119.  
  120.    public JTree(TreeModel var1) {
  121.       ((Container)this).setLayout((LayoutManager)null);
  122.       this.rowHeight = 16;
  123.       this.visibleRowCount = 20;
  124.       this.rootVisible = true;
  125.       this.selectionModel = new DefaultTreeSelectionModel();
  126.       this.cellRenderer = null;
  127.       this.updateUI();
  128.       this.setModel(var1);
  129.    }
  130.  
  131.    public TreeUI getUI() {
  132.       return (TreeUI)super.ui;
  133.    }
  134.  
  135.    public void setUI(TreeUI var1) {
  136.       if ((TreeUI)super.ui != var1) {
  137.          super.setUI(var1);
  138.          ((Component)this).repaint();
  139.       }
  140.  
  141.    }
  142.  
  143.    public void updateUI() {
  144.       this.setUI((TreeUI)UIManager.getUI(this));
  145.       ((Container)this).invalidate();
  146.    }
  147.  
  148.    public String getUIClassID() {
  149.       return "TreeUI";
  150.    }
  151.  
  152.    public TreeCellRenderer getCellRenderer() {
  153.       return this.cellRenderer;
  154.    }
  155.  
  156.    public void setCellRenderer(TreeCellRenderer var1) {
  157.       TreeCellRenderer var2 = this.cellRenderer;
  158.       this.cellRenderer = var1;
  159.       ((JComponent)this).firePropertyChange("cellRenderer", var2, this.cellRenderer);
  160.       ((Container)this).invalidate();
  161.    }
  162.  
  163.    public void setEditable(boolean var1) {
  164.       boolean var2 = this.editable;
  165.       this.editable = var1;
  166.       ((JComponent)this).firePropertyChange("editable", var2, var1);
  167.       if (super.accessibleContext != null) {
  168.          super.accessibleContext.firePropertyChange("AccessibleState", var2 ? AccessibleState.EDITABLE : null, var1 ? AccessibleState.EDITABLE : null);
  169.       }
  170.  
  171.    }
  172.  
  173.    public boolean isEditable() {
  174.       return this.editable;
  175.    }
  176.  
  177.    public void setCellEditor(TreeCellEditor var1) {
  178.       TreeCellEditor var2 = this.cellEditor;
  179.       this.cellEditor = var1;
  180.       ((JComponent)this).firePropertyChange("cellEditor", var2, var1);
  181.       ((Container)this).invalidate();
  182.    }
  183.  
  184.    public TreeCellEditor getCellEditor() {
  185.       return this.cellEditor;
  186.    }
  187.  
  188.    public TreeModel getModel() {
  189.       return this.treeModel;
  190.    }
  191.  
  192.    public void setModel(TreeModel var1) {
  193.       TreeModel var2 = this.treeModel;
  194.       this.treeModel = var1;
  195.       ((JComponent)this).firePropertyChange("treeModel", var2, this.treeModel);
  196.       ((Container)this).invalidate();
  197.    }
  198.  
  199.    public boolean isRootVisible() {
  200.       return this.rootVisible;
  201.    }
  202.  
  203.    public void setRootVisible(boolean var1) {
  204.       boolean var2 = this.rootVisible;
  205.       this.rootVisible = var1;
  206.       ((JComponent)this).firePropertyChange("rootVisible", var2, this.rootVisible);
  207.       if (super.accessibleContext != null) {
  208.          ((AccessibleJTree)super.accessibleContext).fireVisibleDataPropertyChange();
  209.       }
  210.  
  211.    }
  212.  
  213.    public void setShowsRootHandles(boolean var1) {
  214.       boolean var2 = this.showsRootHandles;
  215.       this.showsRootHandles = var1;
  216.       ((JComponent)this).firePropertyChange("showsRootHandles", var2, this.showsRootHandles);
  217.       if (super.accessibleContext != null) {
  218.          ((AccessibleJTree)super.accessibleContext).fireVisibleDataPropertyChange();
  219.       }
  220.  
  221.       ((Container)this).invalidate();
  222.    }
  223.  
  224.    public boolean getShowsRootHandles() {
  225.       return this.showsRootHandles;
  226.    }
  227.  
  228.    public void setRowHeight(int var1) {
  229.       int var2 = this.rowHeight;
  230.       this.rowHeight = var1;
  231.       ((JComponent)this).firePropertyChange("rowHeight", var2, this.rowHeight);
  232.       ((Container)this).invalidate();
  233.    }
  234.  
  235.    public int getRowHeight() {
  236.       return this.rowHeight;
  237.    }
  238.  
  239.    public boolean isFixedRowHeight() {
  240.       return this.rowHeight > 0;
  241.    }
  242.  
  243.    public void setLargeModel(boolean var1) {
  244.       boolean var2 = this.largeModel;
  245.       this.largeModel = var1;
  246.       ((JComponent)this).firePropertyChange("largeModel", var2, var1);
  247.    }
  248.  
  249.    public boolean isLargeModel() {
  250.       return this.largeModel;
  251.    }
  252.  
  253.    public void setInvokesStopCellEditing(boolean var1) {
  254.       boolean var2 = this.invokesStopCellEditing;
  255.       this.invokesStopCellEditing = var1;
  256.       ((JComponent)this).firePropertyChange("messagesStopCellEditing", var2, var1);
  257.    }
  258.  
  259.    public boolean getInvokesStopCellEditing() {
  260.       return this.invokesStopCellEditing;
  261.    }
  262.  
  263.    public boolean isPathEditable(TreePath var1) {
  264.       return this.isEditable();
  265.    }
  266.  
  267.    public String getToolTipText(MouseEvent var1) {
  268.       if (var1 != null) {
  269.          Point var2 = var1.getPoint();
  270.          int var3 = this.getRowForLocation(var2.x, var2.y);
  271.          TreeCellRenderer var4 = this.getCellRenderer();
  272.          if (var3 != -1 && var4 != null) {
  273.             TreePath var5 = this.getPathForRow(var3);
  274.             Object var6 = var5.getLastPathComponent();
  275.             Component var7 = var4.getTreeCellRendererComponent(this, var6, this.isRowSelected(var3), this.isExpanded(var3), this.getModel().isLeaf(var6), var3, true);
  276.             if (var7 instanceof JComponent) {
  277.                Rectangle var9 = this.getPathBounds(var5);
  278.                var2.translate(-var9.x, -var9.y);
  279.                MouseEvent var8 = new MouseEvent(var7, ((AWTEvent)var1).getID(), ((InputEvent)var1).getWhen(), ((InputEvent)var1).getModifiers(), var2.x, var2.y, var1.getClickCount(), var1.isPopupTrigger());
  280.                return ((JComponent)var7).getToolTipText(var8);
  281.             }
  282.          }
  283.       }
  284.  
  285.       return null;
  286.    }
  287.  
  288.    public String convertValueToText(Object var1, boolean var2, boolean var3, boolean var4, int var5, boolean var6) {
  289.       return var1 != null ? var1.toString() : "";
  290.    }
  291.  
  292.    public int getRowCount() {
  293.       TreeUI var1 = this.getUI();
  294.       return var1 != null ? var1.getRowCount() : 0;
  295.    }
  296.  
  297.    public void setSelectionPath(TreePath var1) {
  298.       this.getSelectionModel().setSelectionPath(var1);
  299.       if (super.accessibleContext != null) {
  300.          ((AccessibleJTree)super.accessibleContext).fireSelectionPropertyChange();
  301.       }
  302.  
  303.    }
  304.  
  305.    public void setSelectionPaths(TreePath[] var1) {
  306.       this.getSelectionModel().setSelectionPaths(var1);
  307.       if (super.accessibleContext != null) {
  308.          ((AccessibleJTree)super.accessibleContext).fireSelectionPropertyChange();
  309.       }
  310.  
  311.    }
  312.  
  313.    public void setSelectionRow(int var1) {
  314.       int[] var2 = new int[]{var1};
  315.       this.setSelectionRows(var2);
  316.    }
  317.  
  318.    public void setSelectionRows(int[] var1) {
  319.       TreeUI var2 = this.getUI();
  320.       if (var2 != null && var1 != null) {
  321.          int var3 = var1.length;
  322.          TreePath[] var4 = new TreePath[var3];
  323.  
  324.          for(int var5 = 0; var5 < var3; ++var5) {
  325.             var4[var5] = var2.getPathForRow(var1[var5]);
  326.          }
  327.  
  328.          this.setSelectionPaths(var4);
  329.       }
  330.  
  331.    }
  332.  
  333.    public void addSelectionPath(TreePath var1) {
  334.       this.getSelectionModel().addSelectionPath(var1);
  335.       if (super.accessibleContext != null) {
  336.          ((AccessibleJTree)super.accessibleContext).fireSelectionPropertyChange();
  337.       }
  338.  
  339.    }
  340.  
  341.    public void addSelectionPaths(TreePath[] var1) {
  342.       this.getSelectionModel().addSelectionPaths(var1);
  343.       if (super.accessibleContext != null) {
  344.          ((AccessibleJTree)super.accessibleContext).fireSelectionPropertyChange();
  345.       }
  346.  
  347.    }
  348.  
  349.    public void addSelectionRow(int var1) {
  350.       int[] var2 = new int[]{var1};
  351.       this.addSelectionRows(var2);
  352.    }
  353.  
  354.    public void addSelectionRows(int[] var1) {
  355.       TreeUI var2 = this.getUI();
  356.       if (var2 != null && var1 != null) {
  357.          int var3 = var1.length;
  358.          TreePath[] var4 = new TreePath[var3];
  359.  
  360.          for(int var5 = 0; var5 < var3; ++var5) {
  361.             var4[var5] = var2.getPathForRow(var1[var5]);
  362.          }
  363.  
  364.          this.addSelectionPaths(var4);
  365.       }
  366.  
  367.    }
  368.  
  369.    public Object getLastSelectedPathComponent() {
  370.       TreePath var1 = this.getSelectionModel().getSelectionPath();
  371.       return var1 != null ? var1.getLastPathComponent() : null;
  372.    }
  373.  
  374.    public TreePath getSelectionPath() {
  375.       return this.getSelectionModel().getSelectionPath();
  376.    }
  377.  
  378.    public TreePath[] getSelectionPaths() {
  379.       return this.getSelectionModel().getSelectionPaths();
  380.    }
  381.  
  382.    public int[] getSelectionRows() {
  383.       return this.getSelectionModel().getSelectionRows();
  384.    }
  385.  
  386.    public int getSelectionCount() {
  387.       return this.selectionModel.getSelectionCount();
  388.    }
  389.  
  390.    public int getMinSelectionRow() {
  391.       return this.getSelectionModel().getMinSelectionRow();
  392.    }
  393.  
  394.    public int getMaxSelectionRow() {
  395.       return this.getSelectionModel().getMaxSelectionRow();
  396.    }
  397.  
  398.    public int getLeadSelectionRow() {
  399.       return this.getSelectionModel().getLeadSelectionRow();
  400.    }
  401.  
  402.    public TreePath getLeadSelectionPath() {
  403.       return this.getSelectionModel().getLeadSelectionPath();
  404.    }
  405.  
  406.    public boolean isPathSelected(TreePath var1) {
  407.       return this.getSelectionModel().isPathSelected(var1);
  408.    }
  409.  
  410.    public boolean isRowSelected(int var1) {
  411.       return this.getSelectionModel().isRowSelected(var1);
  412.    }
  413.  
  414.    public boolean isExpanded(TreePath var1) {
  415.       TreeUI var2 = this.getUI();
  416.       return var2 != null ? var2.isExpanded(var1) : false;
  417.    }
  418.  
  419.    public boolean isExpanded(int var1) {
  420.       TreeUI var2 = this.getUI();
  421.       return var2 != null ? var2.isExpanded(var1) : false;
  422.    }
  423.  
  424.    public boolean isCollapsed(TreePath var1) {
  425.       TreeUI var2 = this.getUI();
  426.       return var2 != null ? var2.isCollapsed(var1) : false;
  427.    }
  428.  
  429.    public boolean isCollapsed(int var1) {
  430.       TreeUI var2 = this.getUI();
  431.       return var2 != null ? var2.isCollapsed(var1) : false;
  432.    }
  433.  
  434.    public void makeVisible(TreePath var1) {
  435.       TreeUI var2 = this.getUI();
  436.       if (var2 != null) {
  437.          var2.makeVisible(var1);
  438.          if (super.accessibleContext != null) {
  439.             ((AccessibleJTree)super.accessibleContext).fireVisibleDataPropertyChange();
  440.          }
  441.       }
  442.  
  443.    }
  444.  
  445.    public boolean isVisible(TreePath var1) {
  446.       TreeUI var2 = this.getUI();
  447.       return var2 != null ? var2.isVisible(var1) : false;
  448.    }
  449.  
  450.    public Rectangle getPathBounds(TreePath var1) {
  451.       TreeUI var2 = this.getUI();
  452.       return var2 != null ? var2.getPathBounds(var1) : null;
  453.    }
  454.  
  455.    public Rectangle getRowBounds(int var1) {
  456.       TreeUI var2 = this.getUI();
  457.       return var2 != null ? var2.getRowBounds(var1) : null;
  458.    }
  459.  
  460.    public void scrollPathToVisible(TreePath var1) {
  461.       TreeUI var2 = this.getUI();
  462.       if (var2 != null) {
  463.          var2.scrollPathToVisible(var1);
  464.          if (super.accessibleContext != null) {
  465.             ((AccessibleJTree)super.accessibleContext).fireVisibleDataPropertyChange();
  466.          }
  467.       }
  468.  
  469.    }
  470.  
  471.    public void scrollRowToVisible(int var1) {
  472.       TreeUI var2 = this.getUI();
  473.       if (var2 != null) {
  474.          var2.scrollRowToVisible(var1);
  475.          if (super.accessibleContext != null) {
  476.             ((AccessibleJTree)super.accessibleContext).fireVisibleDataPropertyChange();
  477.          }
  478.       }
  479.  
  480.    }
  481.  
  482.    public TreePath getPathForRow(int var1) {
  483.       TreeUI var2 = this.getUI();
  484.       return var2 != null ? var2.getPathForRow(var1) : null;
  485.    }
  486.  
  487.    public int getRowForPath(TreePath var1) {
  488.       TreeUI var2 = this.getUI();
  489.       return var2 != null ? var2.getRowForPath(var1) : -1;
  490.    }
  491.  
  492.    public void expandPath(TreePath var1) {
  493.       TreeUI var2 = this.getUI();
  494.       if (var2 != null) {
  495.          var2.expandPath(var1);
  496.          if (super.accessibleContext != null) {
  497.             ((AccessibleJTree)super.accessibleContext).fireVisibleDataPropertyChange();
  498.          }
  499.       }
  500.  
  501.    }
  502.  
  503.    public void expandRow(int var1) {
  504.       TreeUI var2 = this.getUI();
  505.       if (var2 != null) {
  506.          var2.expandRow(var1);
  507.          if (super.accessibleContext != null) {
  508.             ((AccessibleJTree)super.accessibleContext).fireVisibleDataPropertyChange();
  509.          }
  510.       }
  511.  
  512.    }
  513.  
  514.    public void collapsePath(TreePath var1) {
  515.       TreeUI var2 = this.getUI();
  516.       if (var2 != null) {
  517.          var2.collapsePath(var1);
  518.          if (super.accessibleContext != null) {
  519.             ((AccessibleJTree)super.accessibleContext).fireVisibleDataPropertyChange();
  520.          }
  521.       }
  522.  
  523.    }
  524.  
  525.    public void collapseRow(int var1) {
  526.       TreeUI var2 = this.getUI();
  527.       if (var2 != null) {
  528.          var2.collapseRow(var1);
  529.          if (super.accessibleContext != null) {
  530.             ((AccessibleJTree)super.accessibleContext).fireVisibleDataPropertyChange();
  531.          }
  532.       }
  533.  
  534.    }
  535.  
  536.    public TreePath getPathForLocation(int var1, int var2) {
  537.       TreePath var3 = this.getClosestPathForLocation(var1, var2);
  538.       if (var3 != null) {
  539.          Rectangle var4 = this.getPathBounds(var3);
  540.          if (var1 >= var4.x && var1 < var4.x + var4.width && var2 >= var4.y && var2 < var4.y + var4.height) {
  541.             return var3;
  542.          }
  543.       }
  544.  
  545.       return null;
  546.    }
  547.  
  548.    public int getRowForLocation(int var1, int var2) {
  549.       int var3 = this.getClosestRowForLocation(var1, var2);
  550.       if (var3 != -1) {
  551.          Rectangle var4 = this.getRowBounds(var3);
  552.          if (var1 >= var4.x && var1 < var4.x + var4.width && var2 >= var4.y && var2 < var4.y + var4.height) {
  553.             return var3;
  554.          }
  555.       }
  556.  
  557.       return -1;
  558.    }
  559.  
  560.    public TreePath getClosestPathForLocation(int var1, int var2) {
  561.       TreeUI var3 = this.getUI();
  562.       return var3 != null ? var3.getClosestPathForLocation(var1, var2) : null;
  563.    }
  564.  
  565.    public int getClosestRowForLocation(int var1, int var2) {
  566.       TreeUI var3 = this.getUI();
  567.       return var3 != null ? var3.getClosestRowForLocation(var1, var2) : -1;
  568.    }
  569.  
  570.    public boolean isEditing() {
  571.       TreeUI var1 = this.getUI();
  572.       return var1 != null ? var1.isEditing() : false;
  573.    }
  574.  
  575.    public boolean stopEditing() {
  576.       TreeUI var1 = this.getUI();
  577.       return var1 != null ? var1.stopEditing() : false;
  578.    }
  579.  
  580.    public void startEditingAtPath(TreePath var1) {
  581.       TreeUI var2 = this.getUI();
  582.       if (var2 != null) {
  583.          var2.startEditingAtPath(var1);
  584.       }
  585.  
  586.    }
  587.  
  588.    public TreePath getEditingPath() {
  589.       TreeUI var1 = this.getUI();
  590.       return var1 != null ? var1.getEditingPath() : null;
  591.    }
  592.  
  593.    public void setSelectionModel(TreeSelectionModel var1) {
  594.       if (var1 == null) {
  595.          var1 = com.sun.java.swing.JTree.EmptySelectionModel.sharedInstance();
  596.       }
  597.  
  598.       TreeSelectionModel var2 = this.selectionModel;
  599.       this.selectionModel = (TreeSelectionModel)var1;
  600.       ((JComponent)this).firePropertyChange("selectionModel", var2, this.selectionModel);
  601.       if (super.accessibleContext != null) {
  602.          ((AccessibleJTree)super.accessibleContext).fireSelectionPropertyChange();
  603.       }
  604.  
  605.    }
  606.  
  607.    public TreeSelectionModel getSelectionModel() {
  608.       return this.selectionModel;
  609.    }
  610.  
  611.    protected TreePath[] getPathBetweenRows(int var1, int var2) {
  612.       TreeUI var5 = this.getUI();
  613.       int var3 = Math.min(var1, var2);
  614.       int var4 = Math.max(var1, var2);
  615.       if (var5 == null) {
  616.          return null;
  617.       } else {
  618.          TreePath[] var6 = new TreePath[var4 - var3 + 1];
  619.  
  620.          for(int var7 = var3; var7 <= var4; ++var7) {
  621.             var6[var7 - var3] = var5.getPathForRow(var7);
  622.          }
  623.  
  624.          return var6;
  625.       }
  626.    }
  627.  
  628.    public void setSelectionInterval(int var1, int var2) {
  629.       TreePath[] var3 = this.getPathBetweenRows(var1, var2);
  630.       this.getSelectionModel().setSelectionPaths(var3);
  631.       if (super.accessibleContext != null) {
  632.          ((AccessibleJTree)super.accessibleContext).fireSelectionPropertyChange();
  633.       }
  634.  
  635.    }
  636.  
  637.    public void addSelectionInterval(int var1, int var2) {
  638.       TreePath[] var3 = this.getPathBetweenRows(var1, var2);
  639.       this.getSelectionModel().addSelectionPaths(var3);
  640.       if (super.accessibleContext != null) {
  641.          ((AccessibleJTree)super.accessibleContext).fireSelectionPropertyChange();
  642.       }
  643.  
  644.    }
  645.  
  646.    public void removeSelectionInterval(int var1, int var2) {
  647.       TreePath[] var3 = this.getPathBetweenRows(var1, var2);
  648.       this.getSelectionModel().removeSelectionPaths(var3);
  649.       if (super.accessibleContext != null) {
  650.          ((AccessibleJTree)super.accessibleContext).fireSelectionPropertyChange();
  651.       }
  652.  
  653.    }
  654.  
  655.    public void removeSelectionPath(TreePath var1) {
  656.       this.getSelectionModel().removeSelectionPath(var1);
  657.       if (super.accessibleContext != null) {
  658.          ((AccessibleJTree)super.accessibleContext).fireSelectionPropertyChange();
  659.       }
  660.  
  661.    }
  662.  
  663.    public void removeSelectionPaths(TreePath[] var1) {
  664.       this.getSelectionModel().removeSelectionPaths(var1);
  665.       if (super.accessibleContext != null) {
  666.          ((AccessibleJTree)super.accessibleContext).fireSelectionPropertyChange();
  667.       }
  668.  
  669.    }
  670.  
  671.    public void removeSelectionRow(int var1) {
  672.       int[] var2 = new int[]{var1};
  673.       this.removeSelectionRows(var2);
  674.    }
  675.  
  676.    public void removeSelectionRows(int[] var1) {
  677.       TreeUI var2 = this.getUI();
  678.       if (var2 != null && var1 != null) {
  679.          int var3 = var1.length;
  680.          TreePath[] var4 = new TreePath[var3];
  681.  
  682.          for(int var5 = 0; var5 < var3; ++var5) {
  683.             var4[var5] = var2.getPathForRow(var1[var5]);
  684.          }
  685.  
  686.          this.removeSelectionPaths(var4);
  687.       }
  688.  
  689.    }
  690.  
  691.    public void clearSelection() {
  692.       this.getSelectionModel().clearSelection();
  693.       if (super.accessibleContext != null) {
  694.          ((AccessibleJTree)super.accessibleContext).fireSelectionPropertyChange();
  695.       }
  696.  
  697.    }
  698.  
  699.    public boolean isSelectionEmpty() {
  700.       return this.getSelectionModel().isSelectionEmpty();
  701.    }
  702.  
  703.    public void addTreeExpansionListener(TreeExpansionListener var1) {
  704.       super.listenerList.add(class$com$sun$java$swing$event$TreeExpansionListener != null ? class$com$sun$java$swing$event$TreeExpansionListener : (class$com$sun$java$swing$event$TreeExpansionListener = JComponent.class$("com.sun.java.swing.event.TreeExpansionListener")), var1);
  705.    }
  706.  
  707.    public void removeTreeExpansionListener(TreeExpansionListener var1) {
  708.       super.listenerList.remove(class$com$sun$java$swing$event$TreeExpansionListener != null ? class$com$sun$java$swing$event$TreeExpansionListener : (class$com$sun$java$swing$event$TreeExpansionListener = JComponent.class$("com.sun.java.swing.event.TreeExpansionListener")), var1);
  709.    }
  710.  
  711.    public void fireTreeExpanded(TreePath var1) {
  712.       Object[] var2 = super.listenerList.getListenerList();
  713.       TreeExpansionEvent var3 = null;
  714.  
  715.       for(int var4 = var2.length - 2; var4 >= 0; var4 -= 2) {
  716.          if (var2[var4] == (class$com$sun$java$swing$event$TreeExpansionListener != null ? class$com$sun$java$swing$event$TreeExpansionListener : (class$com$sun$java$swing$event$TreeExpansionListener = JComponent.class$("com.sun.java.swing.event.TreeExpansionListener")))) {
  717.             if (var3 == null) {
  718.                var3 = new TreeExpansionEvent(this, var1);
  719.             }
  720.  
  721.             ((TreeExpansionListener)var2[var4 + 1]).treeExpanded(var3);
  722.          }
  723.       }
  724.  
  725.    }
  726.  
  727.    public void fireTreeCollapsed(TreePath var1) {
  728.       Object[] var2 = super.listenerList.getListenerList();
  729.       TreeExpansionEvent var3 = null;
  730.  
  731.       for(int var4 = var2.length - 2; var4 >= 0; var4 -= 2) {
  732.          if (var2[var4] == (class$com$sun$java$swing$event$TreeExpansionListener != null ? class$com$sun$java$swing$event$TreeExpansionListener : (class$com$sun$java$swing$event$TreeExpansionListener = JComponent.class$("com.sun.java.swing.event.TreeExpansionListener")))) {
  733.             if (var3 == null) {
  734.                var3 = new TreeExpansionEvent(this, var1);
  735.             }
  736.  
  737.             ((TreeExpansionListener)var2[var4 + 1]).treeCollapsed(var3);
  738.          }
  739.       }
  740.  
  741.    }
  742.  
  743.    public void addTreeSelectionListener(TreeSelectionListener var1) {
  744.       super.listenerList.add(class$com$sun$java$swing$event$TreeSelectionListener != null ? class$com$sun$java$swing$event$TreeSelectionListener : (class$com$sun$java$swing$event$TreeSelectionListener = JComponent.class$("com.sun.java.swing.event.TreeSelectionListener")), var1);
  745.       if (super.listenerList.getListenerCount(class$com$sun$java$swing$event$TreeSelectionListener != null ? class$com$sun$java$swing$event$TreeSelectionListener : (class$com$sun$java$swing$event$TreeSelectionListener = JComponent.class$("com.sun.java.swing.event.TreeSelectionListener"))) != 0 && this.selectionRedirector == null) {
  746.          this.selectionRedirector = new TreeSelectionRedirector(this);
  747.          this.selectionModel.addTreeSelectionListener(this.selectionRedirector);
  748.       }
  749.  
  750.    }
  751.  
  752.    public void removeTreeSelectionListener(TreeSelectionListener var1) {
  753.       super.listenerList.remove(class$com$sun$java$swing$event$TreeSelectionListener != null ? class$com$sun$java$swing$event$TreeSelectionListener : (class$com$sun$java$swing$event$TreeSelectionListener = JComponent.class$("com.sun.java.swing.event.TreeSelectionListener")), var1);
  754.       if (super.listenerList.getListenerCount(class$com$sun$java$swing$event$TreeSelectionListener != null ? class$com$sun$java$swing$event$TreeSelectionListener : (class$com$sun$java$swing$event$TreeSelectionListener = JComponent.class$("com.sun.java.swing.event.TreeSelectionListener"))) == 0 && this.selectionRedirector != null) {
  755.          this.selectionModel.removeTreeSelectionListener(this.selectionRedirector);
  756.          this.selectionRedirector = null;
  757.       }
  758.  
  759.    }
  760.  
  761.    protected void fireValueChanged(TreeSelectionEvent var1) {
  762.       Object[] var2 = super.listenerList.getListenerList();
  763.  
  764.       for(int var3 = var2.length - 2; var3 >= 0; var3 -= 2) {
  765.          if (var2[var3] == (class$com$sun$java$swing$event$TreeSelectionListener != null ? class$com$sun$java$swing$event$TreeSelectionListener : (class$com$sun$java$swing$event$TreeSelectionListener = JComponent.class$("com.sun.java.swing.event.TreeSelectionListener")))) {
  766.             ((TreeSelectionListener)var2[var3 + 1]).valueChanged(var1);
  767.          }
  768.       }
  769.  
  770.    }
  771.  
  772.    public void treeDidChange() {
  773.       ((JComponent)this).revalidate();
  774.       ((Component)this).repaint();
  775.    }
  776.  
  777.    public void setVisibleRowCount(int var1) {
  778.       int var2 = this.visibleRowCount;
  779.       this.visibleRowCount = var1;
  780.       ((JComponent)this).firePropertyChange("visibleRowCount", var2, this.visibleRowCount);
  781.       ((Container)this).invalidate();
  782.       if (super.accessibleContext != null) {
  783.          ((AccessibleJTree)super.accessibleContext).fireVisibleDataPropertyChange();
  784.       }
  785.  
  786.    }
  787.  
  788.    public int getVisibleRowCount() {
  789.       return this.visibleRowCount;
  790.    }
  791.  
  792.    private void writeObject(ObjectOutputStream var1) throws IOException {
  793.       Vector var2 = new Vector();
  794.       var1.defaultWriteObject();
  795.       if (this.cellRenderer != null && this.cellRenderer instanceof Serializable) {
  796.          var2.addElement("cellRenderer");
  797.          var2.addElement(this.cellRenderer);
  798.       }
  799.  
  800.       if (this.cellEditor != null && this.cellEditor instanceof Serializable) {
  801.          var2.addElement("cellEditor");
  802.          var2.addElement(this.cellEditor);
  803.       }
  804.  
  805.       if (this.treeModel != null && this.treeModel instanceof Serializable) {
  806.          var2.addElement("treeModel");
  807.          var2.addElement(this.treeModel);
  808.       }
  809.  
  810.       if (this.selectionModel != null && this.selectionModel instanceof Serializable) {
  811.          var2.addElement("selectionModel");
  812.          var2.addElement(this.selectionModel);
  813.       }
  814.  
  815.       var1.writeObject(var2);
  816.    }
  817.  
  818.    private void readObject(ObjectInputStream var1) throws IOException, ClassNotFoundException {
  819.       var1.defaultReadObject();
  820.       Vector var2 = (Vector)var1.readObject();
  821.       int var3 = 0;
  822.       int var4 = var2.size();
  823.       if (var3 < var4 && var2.elementAt(var3).equals("cellRenderer")) {
  824.          ++var3;
  825.          this.cellRenderer = (TreeCellRenderer)var2.elementAt(var3);
  826.          ++var3;
  827.       }
  828.  
  829.       if (var3 < var4 && var2.elementAt(var3).equals("cellEditor")) {
  830.          ++var3;
  831.          this.cellEditor = (TreeCellEditor)var2.elementAt(var3);
  832.          ++var3;
  833.       }
  834.  
  835.       if (var3 < var4 && var2.elementAt(var3).equals("treeModel")) {
  836.          ++var3;
  837.          this.treeModel = (TreeModel)var2.elementAt(var3);
  838.          ++var3;
  839.       }
  840.  
  841.       if (var3 < var4 && var2.elementAt(var3).equals("selectionModel")) {
  842.          ++var3;
  843.          this.selectionModel = (TreeSelectionModel)var2.elementAt(var3);
  844.          ++var3;
  845.       }
  846.  
  847.    }
  848.  
  849.    public boolean isOpaque() {
  850.       return true;
  851.    }
  852.  
  853.    public Dimension getPreferredScrollableViewportSize() {
  854.       int var1 = ((JComponent)this).getPreferredSize().width;
  855.       int var2 = this.getVisibleRowCount();
  856.       int var3;
  857.       if (this.isFixedRowHeight()) {
  858.          var3 = var2 * this.getRowHeight();
  859.       } else {
  860.          TreeUI var4 = this.getUI();
  861.          if (var4 != null && var4.getRowCount() > 0) {
  862.             var3 = this.getRowBounds(0).height * var2;
  863.          } else {
  864.             var3 = 16 * var2;
  865.          }
  866.       }
  867.  
  868.       return new Dimension(var1, var3);
  869.    }
  870.  
  871.    public int getScrollableUnitIncrement(Rectangle var1, int var2, int var3) {
  872.       if (var2 == 1) {
  873.          int var5 = this.getClosestRowForLocation(0, var1.y);
  874.          if (var5 != -1) {
  875.             Rectangle var4 = this.getRowBounds(var5);
  876.             if (var4.y != var1.y) {
  877.                if (var3 < 0) {
  878.                   return var1.y - var4.y;
  879.                }
  880.  
  881.                return var4.y + var4.height - var1.y;
  882.             }
  883.  
  884.             if (var3 >= 0) {
  885.                return var4.height;
  886.             }
  887.  
  888.             if (var5 != 0) {
  889.                var4 = this.getRowBounds(var5 - 1);
  890.                return var4.height;
  891.             }
  892.          }
  893.  
  894.          return 0;
  895.       } else {
  896.          return 4;
  897.       }
  898.    }
  899.  
  900.    public int getScrollableBlockIncrement(Rectangle var1, int var2, int var3) {
  901.       return var2 == 1 ? var1.height : var1.width;
  902.    }
  903.  
  904.    public boolean getScrollableTracksViewportWidth() {
  905.       return false;
  906.    }
  907.  
  908.    public boolean getScrollableTracksViewportHeight() {
  909.       return false;
  910.    }
  911.  
  912.    public AccessibleContext getAccessibleContext() {
  913.       if (super.accessibleContext == null) {
  914.          super.accessibleContext = new AccessibleJTree(this);
  915.       }
  916.  
  917.       return super.accessibleContext;
  918.    }
  919. }
  920.