/*
* SortableTable.java
*
* Created on November 5, 2005, 2:30 PM
*
* @author E. Rajasekar.
*/
package app.astrosoft.ui.table;
import app.astrosoft.consts.AstrosoftTableColumn;
import app.astrosoft.consts.TableStyle;
import app.astrosoft.ui.util.UIUtil;
import java.awt.Component;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JTable;
import javax.swing.table.JTableHeader;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumn;
import javax.swing.table.TableColumnModel;
public class SortableTable extends AstrosoftTable {
private static final String IMAGE_ARROW_UP = "arrow_up";
private static final String IMAGE_ARROW_DOWN = "arrow_down";
public SortableTable(SortableTableModel model, TableStyle tableStyle) {
super(model, tableStyle);
JTableHeader header = getTableHeader();
header.addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e){
tableHeaderClicked(e);
}
});
setSortableHeaderRender();
//header.setDefaultRenderer(new SortableHeaderRenderer(header.getDefaultRenderer()));
}
private void tableHeaderClicked(MouseEvent e){
JTableHeader h = (JTableHeader) e.getSource();
TableColumnModel columnModel = h.getColumnModel();
//Columns may be dragged and re-ordered
int viewColumn = columnModel.getColumnIndexAtX(e.getX());
//int colClicked = columnModel.getColumn(viewColumn).getModelIndex();
int colClicked = convertColumnIndexToModel(viewColumn);
sortData(colClicked);
}
private void sortData(int colIndex){
SortableTableModel model = (SortableTableModel )getModel();
AstrosoftTableColumn colClicked = model.getColumn(colIndex);
if (model.getSortableColumns().contains(colClicked)) {
model.sortData(colClicked);
getTableHeader().repaint();
}
}
public ImageIcon getSortImageIcon(){
SortableTableModel model = (SortableTableModel )getModel();
String imageName = model.getSortInfo().getSortDir()? IMAGE_ARROW_DOWN : IMAGE_ARROW_UP;
return UIUtil.createImageIcon(imageName);
}
private void setSortableHeaderRender() {
AstrosoftTableModel model = (AstrosoftTableModel) getModel();
ColumnMetaData colMetaData = model.getColumnMetaData();
for(AstrosoftTableColumn col : colMetaData.getVisibleColumns()){
TableColumn tc = getColumnModel().getColumn(model.getColumnIndex(col));
tc.setHeaderRenderer(new SortableHeaderRenderer(getHeaderRenderer(col)));
}
}
}