/*
* Tiled Map Editor, (c) 2004-2006
*
* 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.
*
* Adam Turk <aturk@biggeruniverse.com>
* Bjorn Lindeijer <bjorn@lindeijer.nl>
*/
package tiled.mapeditor.util;
import java.util.Iterator;
import java.util.Vector;
import javax.swing.table.AbstractTableModel;
import tiled.core.Map;
import tiled.core.MapChangeListener;
import tiled.core.MapChangedEvent;
import tiled.core.TileSet;
import tiled.core.TilesetChangeListener;
import tiled.core.TilesetChangedEvent;
import tiled.mapeditor.Resources;
public class TilesetTableModel extends AbstractTableModel implements MapChangeListener, TilesetChangeListener
{
/**
*
*/
private static final long serialVersionUID = -3899665965610131746L;
private Map map;
private static final String[] columnNames = { Resources.getString("dialog.tilesetmanager.table.name"),
Resources.getString("dialog.tilesetmanager.table.source") };
private static final String EMBEDDED = Resources.getString("dialog.tilesetmanager.embedded");
public TilesetTableModel(Map map) {
this.map = map;
for (TileSet tileset : map.getTilesets()) {
tileset.addTilesetChangeListener(this);
}
}
@Override
public String getColumnName(int col) {
return columnNames[col];
}
public int getRowCount() {
if (map != null) {
return map.getTilesets().size();
} else {
return 0;
}
}
public int getColumnCount() {
return columnNames.length;
}
public Object getValueAt(int row, int col) {
Vector<TileSet> tilesets = map.getTilesets();
if (row >= 0 && row < tilesets.size()) {
TileSet tileset = (TileSet)tilesets.get(row);
if (col == 0) {
return tileset.getName();
} else {
String ret = tileset.getSource();
if (ret == null) {
ret = EMBEDDED;
}
return ret;
}
} else {
return null;
}
}
@Override
public boolean isCellEditable(int row, int col) {
return col == 0;
}
@Override
public void setValueAt(Object value, int row, int col) {
if (col != 0) return;
Vector<TileSet> tilesets = map.getTilesets();
if (row >= 0 && row < tilesets.size()) {
TileSet tileset = (TileSet)tilesets.get(row);
if (col == 0) {
tileset.setName(value.toString());
}
fireTableCellUpdated(row, col);
}
}
/* private int checkSetUsage(TileSet set) {
int used = 0;
Iterator<Tile> tileIterator = set.iterator();
while (tileIterator.hasNext()) {
Tile tile = (Tile)tileIterator.next();
Iterator<MapLayer> itr = map.getLayers();
while (itr.hasNext()) {
MapLayer ml = (MapLayer)itr.next();
if (ml instanceof TileLayer) {
if (((TileLayer) ml).isUsed(tile)) {
used++;
break;
}
}
}
}
return used;
}
*/
public void mapChanged(MapChangedEvent event) {
}
public void tilesetAdded(MapChangedEvent event, TileSet tileset) {
int index = map.getTilesets().indexOf(tileset);
if (index == -1) return;
tileset.addTilesetChangeListener(this);
fireTableRowsInserted(index, index);
}
public void tilesetRemoved(MapChangedEvent event, int index) {
fireTableRowsDeleted(index - 1, index);
}
public void tilesetsSwapped(MapChangedEvent event, int index0, int index1) {
fireTableRowsUpdated(index0, index1);
}
public void tilesetChanged(TilesetChangedEvent event) {
}
public void nameChanged(TilesetChangedEvent event, String oldName, String newName) {
int index = map.getTilesets().indexOf(event.getTileset());
if (index == -1) return;
fireTableCellUpdated(index, 0);
}
public void sourceChanged(TilesetChangedEvent event, String oldSource, String newSource) {
int index = map.getTilesets().indexOf(event.getTileset());
if (index == -1) return;
fireTableCellUpdated(index, 1);
}
public void clearListeners() {
for (Iterator<TileSet> it = map.getTilesets().iterator(); it.hasNext();) {
it.next().removeTilesetChangeListener(this);
}
}
}