package org.open2jam.gui;
import java.util.ArrayList;
import java.util.List;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
import javax.swing.table.TableModel;
import org.open2jam.parsers.Chart;
import org.open2jam.parsers.ChartList;
/**
*
* @author fox
*/
public class ChartListTableModel implements TableModel
{
private ArrayList<ChartList> items;
private final String[] col_names = new String[] { "Name", "Level", "Genre" };
private int rank;
private final ArrayList<TableModelListener> listeners;
public ChartListTableModel()
{
listeners = new ArrayList<TableModelListener>();
items = new ArrayList<ChartList>();
}
public void clear()
{
items.clear();
}
public void addRows(List<ChartList> l)
{
items.addAll(l);
fireListeners();
}
public void setRawList(ArrayList<ChartList> list) {
items = list;
fireListeners();
}
public ArrayList<ChartList> getRawList() {
return items;
}
public void setRank(int rank)
{
this.rank = rank;
fireListeners();
}
public ChartList getRow(int row)
{
try {
return items.get(row);
} catch (IndexOutOfBoundsException e) {
return null;
}
}
@Override
public int getRowCount() {
return items.size();
}
@Override
public int getColumnCount() {
return col_names.length;
}
@Override
public String getColumnName(int columnIndex) {
return col_names[columnIndex];
}
@Override
public Class<?> getColumnClass(int columnIndex) {
switch(columnIndex)
{
case 0:return String.class;
case 1:return Integer.class;
case 2:return String.class;
}
return Object.class;
}
@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
return false;
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
Chart c;
if(items.size() <= rowIndex)return null;
if(items.get(rowIndex).isEmpty()) return null;
if(items.get(rowIndex).size()-1 < rank)
c = items.get(rowIndex).get(0);
else
c = items.get(rowIndex).get(rank);
switch(columnIndex)
{
case 0:
String str = c.getTitle();
if(items.get(rowIndex).size()-1 < rank)
str = "[AUTO-EASY] "+str;
return str;
case 1:return c.getLevel();
case 2:return c.getGenre();
}
return null;
}
@Override
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
throw new UnsupportedOperationException("Can't do that cowboy");
}
@Override
public void addTableModelListener(TableModelListener l) {
listeners.add(l);
}
@Override
public void removeTableModelListener(TableModelListener l) {
listeners.remove(l);
}
private void fireListeners() {
TableModelEvent e = new TableModelEvent(this);
fireListeners(e);
}
private void fireListeners(TableModelEvent e) {
for(TableModelListener l : listeners)l.tableChanged(e);
}
}