package org.korsakow.ide.ui.controller.action;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;
import javax.swing.event.CellEditorListener;
import javax.swing.event.ChangeEvent;
import org.korsakow.ide.ui.components.tree.KNode;
import org.korsakow.ide.ui.components.tree.ResourceNode;
import org.korsakow.ide.ui.resourceexplorer.ResourceTreeTable;
import org.korsakow.ide.ui.resourceexplorer.ResourceTreeTableCellEditor;
import org.korsakow.ide.util.UIUtil;
import com.sun.swingx.treetable.TreeTableModel;
public class RenameAction implements ActionListener, CellEditorListener
{
private final ResourceTreeTable treeTable;
public RenameAction(ResourceTreeTable treeTable)
{
this.treeTable = treeTable;
}
public void actionPerformed(ActionEvent event)
{
List<? extends KNode> selectedNodes = treeTable.getSelectedNodes();
if (selectedNodes.size() != 1)
return;
treeTable.editCellAt(selectedNodes.get(0), 0);
}
@Override
public void editingCanceled(ChangeEvent e)
{
}
@Override
public void editingStopped(ChangeEvent e)
{
// // TreeTable.getEditingNode, the obvious choice, returns null at this point because swing is terribly designed
KNode editingNode = ((ResourceTreeTableCellEditor)treeTable.getDefaultEditor(TreeTableModel.class)).getEditingNode();
// sometimes the node has been removed already
if (!UIUtil.isRooted(treeTable.getRootNode(), editingNode))
return;
String newName = treeTable.getDefaultEditor(TreeTableModel.class).getCellEditorValue().toString();
if (editingNode instanceof ResourceNode)
new RenameCommitAction(treeTable, ((ResourceNode)editingNode).getResourceId(), newName).actionPerformed(null);
else
editingNode.setName(newName);
}
}