package kiyut.swing.shell.shelllistview;
import java.awt.event.MouseEvent;
import javax.swing.JTable;
import javax.swing.event.ChangeEvent;
import javax.swing.table.JTableHeader;
import javax.swing.table.TableColumnModel;
/** <code>DetailView</code> is a view for <code>ShellListView</code> which display
* the <code>ShellListViewModel</code> in a table like view.
* It has 4 column: name, size, type, modified
*
* @author tonny
*/
public class DetailView extends JTable implements ViewComponent {
private boolean doNotEdit = false;
/** Constructs a <code>DetailView</code> using the given data model
* @param dataModel data model for this component
*/
public DetailView(ShellListViewModel dataModel) {
super(dataModel);
JTableHeader header = getTableHeader();
header.setReorderingAllowed(true);
header.addMouseListener(new java.awt.event.MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
onHeaderMouseClicked(e);
}
});
// set column
//TableColumnModel columnModel = getColumnModel();
columnModel.getColumn(0).setPreferredWidth(200);
columnModel.getColumn(1).setPreferredWidth(50);
columnModel.getColumn(2).setPreferredWidth(50);
columnModel.getColumn(3).setPreferredWidth(120);
columnModel.getColumn(0).setCellRenderer(new DetailNameCellRenderer(dataModel.getFileSystemView()));
columnModel.getColumn(1).setCellRenderer(new DetailSizeCellRenderer());
columnModel.getColumn(3).setCellRenderer(new DetailModifiedCellRenderer());
// set column editor
DetailNameCellEditor newCellEditor = new DetailNameCellEditor();
columnModel.getColumn(0).setCellEditor(newCellEditor);
}
/** {@inheritDoc} */
public ShellListViewModel getViewModel() {
return (ShellListViewModel)getModel();
}
/** Overrides to provide only name column is editable
* {@inheritDoc}
*/
@Override
public boolean isCellEditable(int row, int col) {
boolean b = false;
//ShellListViewModel dataModel = (ShellListViewModel)getModel();
//if ((col == 0) && (dataModel.getState() == ShellListViewModel.EDIT)) {
if ((col == 0) && (doNotEdit == false)) {
b = true;
}
doNotEdit = false;
return b;
}
/** Overriden to handle mouse Double Click traverse instead of Edit
* {@inheritDoc} */
@Override
protected void processMouseEvent(MouseEvent evt) {
if (evt.getClickCount() == 2) {
doNotEdit = true;
}
super.processMouseEvent(evt);
}
@Override
public void editingCanceled(ChangeEvent evt) {
ShellListViewModel model = (ShellListViewModel)getModel();
model.setState(ShellListViewModel.BROWSE);
super.editingCanceled(evt);
//removeEditor();
}
@Override
public void editingStopped(ChangeEvent evt) {
ShellListViewModel modle = (ShellListViewModel)getModel();
modle.setState(ShellListViewModel.BROWSE);
super.editingStopped(evt);
}
////////////////////////////////
// Event Handler
///////////////////////////////
/** Invoked when the mouse button has been clicked (pressed and released) on the header
* @param evt a <code>MouseEvent</code> object
*/
private void onHeaderMouseClicked(MouseEvent evt) {
TableColumnModel colModel = getColumnModel();
int viewColumnIndex = colModel.getColumnIndexAtX(evt.getX());
int column = convertColumnIndexToModel(viewColumnIndex);
//System.err.println("table header click column:" + column);
if (evt.getClickCount() == 1 && column != -1) {
ShellListViewModel model = (ShellListViewModel)getModel();
model.setSortBy(column);
model.refresh();
}
}
}