/**
*
*/
package org.korsakow.ide.ui.resourceexplorer;
import java.awt.Component;
import javax.swing.JTable;
import javax.swing.SwingConstants;
import javax.swing.table.DefaultTableCellRenderer;
import org.korsakow.ide.resources.MediaProperty;
import org.korsakow.ide.resources.ResourceProperty;
import org.korsakow.ide.resources.ResourceType;
import org.korsakow.ide.resources.SnuProperty;
import org.korsakow.ide.ui.components.tree.ResourceNode;
import org.korsakow.ide.ui.resources.MediaResourceListColumns;
import org.korsakow.ide.util.UIResourceManager;
/**
* Renders columns other than the tree column in a TreeTable
*/
public class ResourceTreeTableCellRenderer extends AggregateCellRenderer
{
public ResourceTreeTableCellRenderer()
{
addRenderer(ResourceBrowser.Column.class, new ResourceBrowserColumnRenderer());
addRenderer(ResourceProperty.class, new ResourcePropertyRenderer());
addRenderer(MediaResourceListColumns.Column.class, new MediaColumnRenderer());
addRenderer(MediaProperty.class, new MediaPropertyRenderer());
addRenderer(SnuProperty.class, new SnuPropertyRenderer());
}
private static class ResourceBrowserColumnRenderer extends DefaultTableCellRenderer
{
@Override
public Component getTableCellRendererComponent(
JTable table, // the list
Object value, // value to display
boolean isSelected, // is the cell selected
boolean cellHasFocus, // is the cell selected
int row, // column index
int column) // column index
{
super.getTableCellRendererComponent(table, "", isSelected, cellHasFocus, row, column);
setIcon(null);
if (value instanceof ResourceNode == false)
return this;
ResourceNode resourceNode = (ResourceNode)value;
ResourceType type = resourceNode.getType();
ResourceBrowser.Column property = (ResourceBrowser.Column)AggregateCellRenderer.getColumnIdentifier(table, column);
switch (property)
{
case ISSNU:
setText("");
if (resourceNode.isSnufied())
setIcon(UIResourceManager.getIcon(UIResourceManager.ICON_CHECK));
else
setIcon(null);
break;
case PREVIEW:
setText("");
setIcon(null);
if (resourceNode.getPreview())
setIcon(UIResourceManager.getIcon(UIResourceManager.ICON_CHECK));
else
setIcon(null);
setHorizontalAlignment(SwingConstants.CENTER);
break;
case BACKGROUNDSOUND:
setText("");
setIcon(null);
if (resourceNode.getBgSound())
setIcon(UIResourceManager.getIcon(UIResourceManager.ICON_CHECK));
else
setIcon(null);
setHorizontalAlignment(SwingConstants.CENTER);
break;
case CLICKSOUND:
setText("");
setIcon(null);
if (resourceNode.getClickSound())
setIcon(UIResourceManager.getIcon(UIResourceManager.ICON_CHECK));
else
setIcon(null);
setHorizontalAlignment(SwingConstants.CENTER);
break;
}
return this;
}
}
private static class ResourcePropertyRenderer extends DefaultTableCellRenderer
{
@Override
public Component getTableCellRendererComponent(
JTable table, // the list
Object value, // value to display
boolean isSelected, // is the cell selected
boolean cellHasFocus, // is the cell selected
int row, // column index
int column) // column index
{
super.getTableCellRendererComponent(table, "", isSelected, cellHasFocus, row, column);
setIcon(null);
if (value instanceof ResourceNode == false)
return this;
ResourceNode resourceNode = (ResourceNode)value;
ResourceType type = resourceNode.getResourceType();
ResourceProperty property = (ResourceProperty)AggregateCellRenderer.getColumnIdentifier(table, column);
switch (property)
{
case TYPE:{
// do not be mislead: this doesn't actually handle the tree column of the treetable (see ResourceTreeCellRenderer)
// but it would handle this info if it appeared in any other column.
if (resourceNode.getMediaType() != null)
setIcon(resourceNode.getMediaType().getIcon());
else
setIcon(resourceNode.getType().getIcon());
setHorizontalTextPosition(SwingConstants.LEFT);
setHorizontalAlignment(SwingConstants.CENTER);
setVerticalAlignment(SwingConstants.CENTER);
}break;
case NAME:{
// do not be mislead: this doesn't actually handle the tree column of the treetable
// but it would handle this info if it appeared in any other column.
// see ResourceTreeCellRenderer
setText(resourceNode.getName());
}break;
}
return this;
}
}
private static class ResourceColumnRenderer extends DefaultTableCellRenderer
{
@Override
public Component getTableCellRendererComponent(
JTable table, // the list
Object value, // value to display
boolean isSelected, // is the cell selected
boolean cellHasFocus, // is the cell selected
int row, // column index
int column) // column index
{
super.getTableCellRendererComponent(table, "", isSelected, cellHasFocus, row, column);
setIcon(null);
return this;
}
}
private static class MediaPropertyRenderer extends DefaultTableCellRenderer
{
@Override
public Component getTableCellRendererComponent(
JTable table, // the list
Object value, // value to display
boolean isSelected, // is the cell selected
boolean cellHasFocus, // is the cell selected
int row, // column index
int column) // column index
{
super.getTableCellRendererComponent(table, "", isSelected, cellHasFocus, row, column);
setIcon(null);
if (value instanceof ResourceNode == false)
return this;
ResourceNode resourceNode = (ResourceNode)value;
ResourceType type = resourceNode.getResourceType();
if (!type.isMedia()) {
if (type != ResourceType.SNU)
return this;
}
MediaProperty property = (MediaProperty)AggregateCellRenderer.getColumnIdentifier(table, column);
switch (property)
{
case FILENAME:
if (resourceNode.getFilename() != null)
setText(resourceNode.getFilename());
else
setText("N/A");
break;
}
return this;
}
}
private static class MediaColumnRenderer extends DefaultTableCellRenderer
{
@Override
public Component getTableCellRendererComponent(
JTable table, // the list
Object value, // value to display
boolean isSelected, // is the cell selected
boolean cellHasFocus, // is the cell selected
int row, // column index
int column) // column index
{
super.getTableCellRendererComponent(table, "", isSelected, cellHasFocus, row, column);
setIcon(null);
if (value instanceof ResourceNode == false)
return this;
ResourceNode resourceNode = (ResourceNode)value;
ResourceType type = resourceNode.getResourceType();
if (!type.isMedia()) {
if (type!=ResourceType.SNU)
return this;
// resource = ((Snu)resource).getMainMedia();
}
MediaResourceListColumns.Column property = (MediaResourceListColumns.Column)AggregateCellRenderer.getColumnIdentifier(table, column);
switch (property)
{
case PREVIEW:
setText("");
setIcon(null);
if (resourceNode.getPreview())
setIcon(UIResourceManager.getIcon(UIResourceManager.ICON_CHECK));
else
setIcon(null);
setHorizontalAlignment(SwingConstants.CENTER);
break;
case BACKGROUND:
setText("");
setIcon(null);
if (resourceNode.getBgSound())
setIcon(UIResourceManager.getIcon(UIResourceManager.ICON_CHECK));
else
setIcon(null);
setHorizontalAlignment(SwingConstants.CENTER);
break;
case CLICKSOUND:
setText("");
setIcon(null);
if (resourceNode.getClickSound())
setIcon(UIResourceManager.getIcon(UIResourceManager.ICON_CHECK));
else
setIcon(null);
setHorizontalAlignment(SwingConstants.CENTER);
break;
}
return this;
}
}
private static class SnuPropertyRenderer extends DefaultTableCellRenderer
{
@Override
public Component getTableCellRendererComponent(
JTable table, // the list
Object value, // value to display
boolean isSelected, // is the cell selected
boolean cellHasFocus, // is the cell selected
int row, // column index
int column) // column index
{
super.getTableCellRendererComponent(table, "", isSelected, cellHasFocus, row, column);
setIcon(null);
if (value instanceof ResourceNode == false)
return this;
ResourceNode resourceNode = (ResourceNode)value;
ResourceType type = resourceNode.getResourceType();
if (type!=ResourceType.SNU)
return this;
SnuProperty property = (SnuProperty)AggregateCellRenderer.getColumnIdentifier(table, column);
switch (property)
{
case ENDER:
setText("");
if (resourceNode.isEndSnu())
setIcon(UIResourceManager.getIcon(UIResourceManager.ICON_CHECK));
else
setIcon(null);
setHorizontalAlignment(SwingConstants.CENTER);
break;
case STARTER:
setText("");
if (resourceNode.isStartSnu())
setIcon(UIResourceManager.getIcon(UIResourceManager.ICON_CHECK));
else
setIcon(null);
setHorizontalAlignment(SwingConstants.CENTER);
break;
case LIVES:
Object lives = resourceNode.getLives();
if (lives == null)
lives = UIResourceManager.getSymbol(UIResourceManager.SYMBOL_INFINITE);
setText(lives.toString());
setHorizontalAlignment(SwingConstants.CENTER);
break;
case INTERFACE:
if (resourceNode.getInterfaceName() != null)
setText(resourceNode.getInterfaceName());
else
setText("");
break;
case BACKGROUNDSOUND:
setText("");
if (resourceNode.getBgSound())
setIcon(UIResourceManager.getIcon(UIResourceManager.ICON_CHECK));
else
setIcon(null);
setHorizontalAlignment(SwingConstants.CENTER);
break;
case PREVIEWMEDIA:
setText("");
if (resourceNode.getPreview())
setIcon(UIResourceManager.getIcon(UIResourceManager.ICON_CHECK));
else
setIcon(null);
setHorizontalAlignment(SwingConstants.CENTER);
break;
}
return this;
}
}
}