package com.vistatec.ocelot.lqi.gui.editor;
import java.awt.Component;
import java.util.Arrays;
import java.util.List;
import java.util.Vector;
import javax.swing.DefaultCellEditor;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JComboBox;
import javax.swing.JTable;
import com.vistatec.ocelot.lqi.constants.LQIConstants;
import com.vistatec.ocelot.lqi.gui.LQIGridTableModel;
/**
* Editor for LQI grid category cells. It displays a combo box listing all
* available LQI categories.
*/
public class CategoryCellEditor extends DefaultCellEditor {
/** Serial version UID. */
private static final long serialVersionUID = -4255258806051066858L;
/**
* Constructor.
*/
public CategoryCellEditor() {
super(new JComboBox<String>());
setClickCountToStart(2);
}
/*
* (non-Javadoc)
* @see javax.swing.DefaultCellEditor#getTableCellEditorComponent(javax.swing.JTable, java.lang.Object, boolean, int, int)
*/
@Override
public Component getTableCellEditorComponent(JTable table, Object value,
boolean isSelected, int row, int column) {
JComboBox<String> comboBox = (JComboBox<String>) super
.getTableCellEditorComponent(table, value, isSelected, row,
column);
Vector<String> comboModel = new Vector<String>(
Arrays.asList(LQIConstants.LQI_CATEGORIES_LIST));
String currCat = "";
if (value != null) {
currCat = (String) value;
}
List<String> existingCat = ((LQIGridTableModel) table.getModel())
.getUsedCategoryName();
existingCat.remove(currCat);
comboModel.removeAll(existingCat);
comboBox.setModel(new DefaultComboBoxModel<>(comboModel));
comboBox.setBackground(table
.getCellRenderer(row, column)
.getTableCellRendererComponent(table, value, isSelected, true,
row, column).getBackground());
comboBox.setSelectedItem(currCat);
return comboBox;
}
}