home *** CD-ROM | disk | FTP | other *** search
/ S283 Planetary Science &… the Search for Life CD 3 / 0_CD-ROM.iso / install / jre1_3 / lib / rt.jar / javax / swing / tree / DefaultTreeCellEditor.class (.txt) < prev    next >
Encoding:
Java Class File  |  1979-12-31  |  6.4 KB  |  295 lines

  1. package javax.swing.tree;
  2.  
  3. import java.awt.Color;
  4. import java.awt.Component;
  5. import java.awt.Container;
  6. import java.awt.Font;
  7. import java.awt.Rectangle;
  8. import java.awt.event.ActionEvent;
  9. import java.awt.event.ActionListener;
  10. import java.awt.event.MouseEvent;
  11. import java.io.IOException;
  12. import java.io.ObjectInputStream;
  13. import java.io.ObjectOutputStream;
  14. import java.io.Serializable;
  15. import java.util.EventObject;
  16. import java.util.Vector;
  17. import javax.swing.DefaultCellEditor;
  18. import javax.swing.Icon;
  19. import javax.swing.JTree;
  20. import javax.swing.SwingUtilities;
  21. import javax.swing.Timer;
  22. import javax.swing.UIManager;
  23. import javax.swing.border.Border;
  24. import javax.swing.event.CellEditorListener;
  25. import javax.swing.event.TreeSelectionEvent;
  26. import javax.swing.event.TreeSelectionListener;
  27.  
  28. public class DefaultTreeCellEditor implements ActionListener, TreeCellEditor, TreeSelectionListener {
  29.    protected TreeCellEditor realEditor;
  30.    protected DefaultTreeCellRenderer renderer;
  31.    protected Container editingContainer;
  32.    protected transient Component editingComponent;
  33.    protected boolean canEdit;
  34.    protected transient int offset;
  35.    protected transient JTree tree;
  36.    protected transient TreePath lastPath;
  37.    protected transient Timer timer;
  38.    protected transient int lastRow;
  39.    protected Color borderSelectionColor;
  40.    protected transient Icon editingIcon;
  41.    protected Font font;
  42.  
  43.    public DefaultTreeCellEditor(JTree var1, DefaultTreeCellRenderer var2) {
  44.       this(var1, var2, (TreeCellEditor)null);
  45.    }
  46.  
  47.    public DefaultTreeCellEditor(JTree var1, DefaultTreeCellRenderer var2, TreeCellEditor var3) {
  48.       this.renderer = var2;
  49.       this.realEditor = var3;
  50.       if (this.realEditor == null) {
  51.          this.realEditor = this.createTreeCellEditor();
  52.       }
  53.  
  54.       this.editingContainer = this.createContainer();
  55.       this.setTree(var1);
  56.       this.setBorderSelectionColor(UIManager.getColor("Tree.editorBorderSelectionColor"));
  57.    }
  58.  
  59.    public void setBorderSelectionColor(Color var1) {
  60.       this.borderSelectionColor = var1;
  61.    }
  62.  
  63.    public Color getBorderSelectionColor() {
  64.       return this.borderSelectionColor;
  65.    }
  66.  
  67.    public void setFont(Font var1) {
  68.       this.font = var1;
  69.    }
  70.  
  71.    public Font getFont() {
  72.       return this.font;
  73.    }
  74.  
  75.    public Component getTreeCellEditorComponent(JTree var1, Object var2, boolean var3, boolean var4, boolean var5, int var6) {
  76.       this.setTree(var1);
  77.       this.lastRow = var6;
  78.       this.determineOffset(var1, var2, var3, var4, var5, var6);
  79.       this.editingComponent = this.realEditor.getTreeCellEditorComponent(var1, var2, var3, var4, var5, var6);
  80.       TreePath var7 = var1.getPathForRow(var6);
  81.       this.canEdit = this.lastPath != null && var7 != null && this.lastPath.equals(var7);
  82.       Font var8 = this.getFont();
  83.       if (var8 == null) {
  84.          if (this.renderer != null) {
  85.             var8 = this.renderer.getFont();
  86.          }
  87.  
  88.          if (var8 == null) {
  89.             var8 = ((Component)var1).getFont();
  90.          }
  91.       }
  92.  
  93.       this.editingContainer.setFont(var8);
  94.       return this.editingContainer;
  95.    }
  96.  
  97.    public Object getCellEditorValue() {
  98.       return this.realEditor.getCellEditorValue();
  99.    }
  100.  
  101.    public boolean isCellEditable(EventObject var1) {
  102.       boolean var2 = false;
  103.       if (!this.realEditor.isCellEditable(var1)) {
  104.          return false;
  105.       } else {
  106.          if (this.canEditImmediately(var1)) {
  107.             var2 = true;
  108.          } else if (this.canEdit && this.shouldStartEditingTimer(var1)) {
  109.             this.startEditingTimer();
  110.          } else if (this.timer != null && this.timer.isRunning()) {
  111.             this.timer.stop();
  112.          }
  113.  
  114.          if (var2) {
  115.             this.prepareForEditing();
  116.          }
  117.  
  118.          return var2;
  119.       }
  120.    }
  121.  
  122.    public boolean shouldSelectCell(EventObject var1) {
  123.       return this.realEditor.shouldSelectCell(var1);
  124.    }
  125.  
  126.    public boolean stopCellEditing() {
  127.       if (this.realEditor.stopCellEditing()) {
  128.          if (this.editingComponent != null) {
  129.             this.editingContainer.remove(this.editingComponent);
  130.          }
  131.  
  132.          this.editingComponent = null;
  133.          return true;
  134.       } else {
  135.          return false;
  136.       }
  137.    }
  138.  
  139.    public void cancelCellEditing() {
  140.       this.realEditor.cancelCellEditing();
  141.       if (this.editingComponent != null) {
  142.          this.editingContainer.remove(this.editingComponent);
  143.       }
  144.  
  145.       this.editingComponent = null;
  146.    }
  147.  
  148.    public void addCellEditorListener(CellEditorListener var1) {
  149.       this.realEditor.addCellEditorListener(var1);
  150.    }
  151.  
  152.    public void removeCellEditorListener(CellEditorListener var1) {
  153.       this.realEditor.removeCellEditorListener(var1);
  154.    }
  155.  
  156.    public void valueChanged(TreeSelectionEvent var1) {
  157.       if (this.tree != null) {
  158.          if (this.tree.getSelectionCount() == 1) {
  159.             this.lastPath = this.tree.getSelectionPath();
  160.          } else {
  161.             this.lastPath = null;
  162.          }
  163.       }
  164.  
  165.       if (this.timer != null) {
  166.          this.timer.stop();
  167.       }
  168.  
  169.    }
  170.  
  171.    public void actionPerformed(ActionEvent var1) {
  172.       if (this.tree != null && this.lastPath != null) {
  173.          this.tree.startEditingAtPath(this.lastPath);
  174.       }
  175.  
  176.    }
  177.  
  178.    protected void setTree(JTree var1) {
  179.       if (this.tree != var1) {
  180.          if (this.tree != null) {
  181.             this.tree.removeTreeSelectionListener(this);
  182.          }
  183.  
  184.          this.tree = var1;
  185.          if (this.tree != null) {
  186.             this.tree.addTreeSelectionListener(this);
  187.          }
  188.  
  189.          if (this.timer != null) {
  190.             this.timer.stop();
  191.          }
  192.       }
  193.  
  194.    }
  195.  
  196.    protected boolean shouldStartEditingTimer(EventObject var1) {
  197.       if (var1 instanceof MouseEvent && SwingUtilities.isLeftMouseButton((MouseEvent)var1)) {
  198.          MouseEvent var2 = (MouseEvent)var1;
  199.          return var2.getClickCount() == 1 && this.inHitRegion(var2.getX(), var2.getY());
  200.       } else {
  201.          return false;
  202.       }
  203.    }
  204.  
  205.    protected void startEditingTimer() {
  206.       if (this.timer == null) {
  207.          this.timer = new Timer(1200, this);
  208.          this.timer.setRepeats(false);
  209.       }
  210.  
  211.       this.timer.start();
  212.    }
  213.  
  214.    protected boolean canEditImmediately(EventObject var1) {
  215.       if (var1 instanceof MouseEvent && SwingUtilities.isLeftMouseButton((MouseEvent)var1)) {
  216.          MouseEvent var2 = (MouseEvent)var1;
  217.          return var2.getClickCount() > 2 && this.inHitRegion(var2.getX(), var2.getY());
  218.       } else {
  219.          return var1 == null;
  220.       }
  221.    }
  222.  
  223.    protected boolean inHitRegion(int var1, int var2) {
  224.       if (this.lastRow != -1 && this.tree != null) {
  225.          Rectangle var3 = this.tree.getRowBounds(this.lastRow);
  226.          if (var3 != null && var1 <= var3.x + this.offset && this.offset < var3.width - 5) {
  227.             return false;
  228.          }
  229.       }
  230.  
  231.       return true;
  232.    }
  233.  
  234.    protected void determineOffset(JTree var1, Object var2, boolean var3, boolean var4, boolean var5, int var6) {
  235.       if (this.renderer != null) {
  236.          if (var5) {
  237.             this.editingIcon = this.renderer.getLeafIcon();
  238.          } else if (var4) {
  239.             this.editingIcon = this.renderer.getOpenIcon();
  240.          } else {
  241.             this.editingIcon = this.renderer.getClosedIcon();
  242.          }
  243.  
  244.          if (this.editingIcon != null) {
  245.             this.offset = this.renderer.getIconTextGap() + this.editingIcon.getIconWidth();
  246.          } else {
  247.             this.offset = this.renderer.getIconTextGap();
  248.          }
  249.       } else {
  250.          this.editingIcon = null;
  251.          this.offset = 0;
  252.       }
  253.  
  254.    }
  255.  
  256.    protected void prepareForEditing() {
  257.       this.editingContainer.add(this.editingComponent);
  258.    }
  259.  
  260.    protected Container createContainer() {
  261.       return new EditorContainer(this);
  262.    }
  263.  
  264.    protected TreeCellEditor createTreeCellEditor() {
  265.       Border var1 = UIManager.getBorder("Tree.editorBorder");
  266.       1 var2 = new 1(this, new DefaultTextField(this, var1));
  267.       ((DefaultCellEditor)var2).setClickCountToStart(1);
  268.       return var2;
  269.    }
  270.  
  271.    private void writeObject(ObjectOutputStream var1) throws IOException {
  272.       Vector var2 = new Vector();
  273.       var1.defaultWriteObject();
  274.       if (this.realEditor != null && this.realEditor instanceof Serializable) {
  275.          var2.addElement("realEditor");
  276.          var2.addElement(this.realEditor);
  277.       }
  278.  
  279.       var1.writeObject(var2);
  280.    }
  281.  
  282.    private void readObject(ObjectInputStream var1) throws IOException, ClassNotFoundException {
  283.       var1.defaultReadObject();
  284.       Vector var2 = (Vector)var1.readObject();
  285.       int var3 = 0;
  286.       int var4 = var2.size();
  287.       if (var3 < var4 && var2.elementAt(var3).equals("realEditor")) {
  288.          ++var3;
  289.          this.realEditor = (TreeCellEditor)var2.elementAt(var3);
  290.          ++var3;
  291.       }
  292.  
  293.    }
  294. }
  295.