package mekhq.gui.model; import java.awt.Component; import java.text.DecimalFormat; import java.util.ArrayList; import javax.swing.JTable; import javax.swing.SwingConstants; import javax.swing.table.DefaultTableCellRenderer; import mekhq.campaign.parts.Part; /** * A table model for displaying parts */ public class PartsTableModel extends DataTableModel { private static final long serialVersionUID = 534443424190075264L; public final static int COL_QUANTITY = 0; public final static int COL_NAME = 1; public final static int COL_DETAIL = 2; public final static int COL_TECH_BASE = 3; public final static int COL_QUALITY = 4; public final static int COL_STATUS = 5; public final static int COL_REPAIR = 6; public final static int COL_COST = 7; public final static int COL_TON = 8; public final static int N_COL = 9; public PartsTableModel() { data = new ArrayList<Part>(); } public int getRowCount() { return data.size(); } @Override public int getColumnCount() { return N_COL; } @Override public String getColumnName(int column) { switch(column) { case COL_NAME: return "Name"; case COL_COST: return "Value"; case COL_QUANTITY: return "#"; case COL_QUALITY: return "Quality"; case COL_TON: return "Tonnage"; case COL_STATUS: return "Status"; case COL_DETAIL: return "Detail"; case COL_TECH_BASE: return "Tech Base"; case COL_REPAIR: return "Repair Details"; default: return "?"; } } public Object getValueAt(int row, int col) { Part part; if(data.isEmpty()) { return ""; } else { part = (Part)data.get(row); } DecimalFormat format = new DecimalFormat(); if(col == COL_NAME) { return "<html><nobr>"+part.getName()+"</nobr></html>"; } if(col == COL_DETAIL) { return "<html><nobr>"+part.getDetails()+"</nobr></html>"; } if(col == COL_COST) { return format.format(part.getActualValue()); } if(col == COL_QUANTITY) { return part.getQuantity(); } if(col == COL_QUALITY) { return part.getQualityName(); } if(col == COL_TON) { return Math.round(part.getTonnage() * 100) / 100.0; } if(col == COL_STATUS) { return "<html><nobr>"+part.getStatus()+"</nobr></html>"; } if(col == COL_TECH_BASE) { return part.getTechBaseName(); } if(col == COL_REPAIR) { return "<html><nobr>"+part.getRepairDesc()+"</nobr></html>"; } return "?"; } public Part getPartAt(int row) { return ((Part) data.get(row)); } public int getColumnWidth(int c) { switch(c) { case COL_NAME: case COL_DETAIL: return 120; case COL_REPAIR: return 150; case COL_STATUS: return 40; case COL_TECH_BASE: return 20; case COL_COST: return 10; default: return 3; } } public int getAlignment(int col) { switch(col) { case COL_QUALITY: return SwingConstants.CENTER; case COL_COST: case COL_TON: return SwingConstants.RIGHT; default: return SwingConstants.LEFT; } } public String getTooltip(int row, int col) { switch(col) { default: return null; } } public PartsTableModel.Renderer getRenderer() { return new PartsTableModel.Renderer(); } public class Renderer extends DefaultTableCellRenderer { private static final long serialVersionUID = 9054581142945717303L; public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); setOpaque(true); int actualCol = table.convertColumnIndexToModel(column); int actualRow = table.convertRowIndexToModel(row); setHorizontalAlignment(getAlignment(actualCol)); setToolTipText(getTooltip(actualRow, actualCol)); return this; } } }