/*
* RomRaider Open-Source Tuning, Logging and Reflashing
* Copyright (C) 2006-2012 RomRaider.com
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
package com.romraider.logger.ecu.ui.paramlist;
import com.romraider.logger.ecu.EcuLogger;
import com.romraider.logger.ecu.definition.EcuData;
import com.romraider.logger.ecu.definition.ExternalData;
import static com.romraider.util.ParamChecker.isNullOrEmpty;
import javax.swing.JTable;
import javax.swing.table.TableCellEditor;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableRowSorter;
import java.awt.Font;
import java.awt.event.MouseEvent;
import java.util.List;
public final class ParameterListTable extends JTable {
private static final long serialVersionUID = -8489190548281346227L;
private UnitsComboBoxEditor comboBoxEditor = new UnitsComboBoxEditor();
private UnitsComboBoxRenderer comboBoxRenderer = new UnitsComboBoxRenderer();
private final ParameterListTableModel tableModel;
public ParameterListTable(ParameterListTableModel tableModel) {
super(tableModel);
this.tableModel = tableModel;
this.getTableHeader().setReorderingAllowed(false);
for (int column = 0; column < tableModel.getColumnCount(); column++) {
if (tableModel.getColumnName(2).equalsIgnoreCase("units")) {
setColumnSortable(column, false);
}
else {
setColumnSortable(column, true);
}
}
if (EcuLogger.isTouchEnabled() == true)
{
this.setRowHeight(40);
Font font = new Font("Tahoma", Font.PLAIN, 16);
this.setFont(font);
}
}
public TableCellRenderer getCellRenderer(int row, int col) {
return displayComboBox(row, col) ? comboBoxRenderer : super.getCellRenderer(row, col);
}
public TableCellEditor getCellEditor(int row, int col) {
return displayComboBox(row, col) ? comboBoxEditor : super.getCellEditor(row, col);
}
public String getToolTipText(MouseEvent mouseEvent) {
List<ParameterRow> parameterRows = tableModel.getParameterRows();
if (!isNullOrEmpty(parameterRows)) {
ParameterRow parameterRow = parameterRows.get(rowAtPoint(mouseEvent.getPoint()));
if (parameterRow != null) {
String description = parameterRow.getLoggerData().getDescription();
if (!isNullOrEmpty(description)) {
return description;
}
}
}
return super.getToolTipText(mouseEvent);
}
private boolean displayComboBox(int row, int col) {
Object value = getValueAt(row, col);
if (EcuData.class.isAssignableFrom(value.getClass())) {
EcuData ecuData = (EcuData) value;
if (ecuData.getConvertors().length > 1)
return true;
}
if (ExternalData.class.isAssignableFrom(value.getClass())) {
ExternalData externalData = (ExternalData) value;
if (externalData.getConvertors().length > 1)
return true;
}
return false;
}
private void setColumnSortable(int column, boolean state) {
TableRowSorter<ParameterListTableModel> sorter =
new TableRowSorter<ParameterListTableModel>(tableModel);
sorter.setSortable(column, state);
setRowSorter(sorter);
}
}