package tk.amberide.ide.swing.tree.filesystem;
import tk.amberide.ide.swing.tree.filesystem.FileTreeModel.FileTreeNode;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.EventObject;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.JTree;
import javax.swing.event.CellEditorListener;
import javax.swing.tree.TreePath;
class FileTreeCellEditor extends JPanel implements javax.swing.tree.TreeCellEditor {
private JTextField tf;
private JLabel lbl;
JTree tree = null;
ArrayList listeners = null;
public FileTreeCellEditor() {
super(new BorderLayout());
tf = new JTextField();
tf.addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent evt) {
if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
tree.stopEditing();
}
}
});
lbl = new JLabel();
lbl.setOpaque(false);
add(lbl, BorderLayout.WEST);
add(tf, BorderLayout.CENTER);
setOpaque(false);
}
public Component getTreeCellEditorComponent(JTree tree, Object value, boolean isSelected, boolean expanded, boolean leaf, int row) {
setBackground(tree.getBackground());
FileTreeNode node = (FileTreeNode) value;
tf.setText(node.getFile().getName());
lbl.setIcon(((JLabel) tree.getCellRenderer().getTreeCellRendererComponent(
tree,
value,
isSelected,
expanded,
leaf,
row,
true)).getIcon());
this.tree = tree;
return this;
}
public Object getCellEditorValue() {
String newName = tf.getText();
if ("".equals(newName)) {
return null;
}
FileSystemTree ft = (FileSystemTree) tree;
ft.renameSelection(newName);
return null;
}
public boolean isCellEditable(EventObject evt) {
if (evt != null) {
JTree t = (JTree) evt.getSource();
if (evt instanceof MouseEvent) {
MouseEvent me = (MouseEvent) evt;
TreePath selected = t.getPathForLocation(me.getX(), me.getY());
if (selected == null) {
return false;
}
FileTreeNode node = (FileTreeNode) selected.getLastPathComponent();
if ((node.isRoot()) || (node.root)) {
return false;
}
if ((me.getClickCount() == 3) && (selected.equals(t.getSelectionPath()))) {
return true;
}
}
} else {
return true;
}
return false;
}
public boolean shouldSelectCell(EventObject anEvent) {
return false;
}
public boolean stopCellEditing() {
return true;
}
public void cancelCellEditing() {
}
public void addCellEditorListener(CellEditorListener l) {
}
public void removeCellEditorListener(CellEditorListener l) {
}
}