/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package org.pepsoft.worldpainter.gardenofeden;
import java.awt.Component;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
import javax.imageio.ImageIO;
import javax.swing.DefaultListCellRenderer;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JList;
import org.pepsoft.worldpainter.WPContextProvider;
import org.pepsoft.worldpainter.util.MinecraftUtil;
/**
*
* @author pepijn
*/
public class ThemeListCellRenderer extends DefaultListCellRenderer {
public ThemeListCellRenderer() {
File file = MinecraftUtil.findMinecraftJar(WPContextProvider.getWPContext().getMinecraftJarProvider());
if (file != null) {
logger.info("Loading default Minecraft texture map from " + file);
try {
JarFile minecraftJar = new JarFile(file);
JarEntry entry = minecraftJar.getJarEntry("terrain.png");
if (entry != null) {
try (InputStream in = minecraftJar.getInputStream(entry)) {
texturePack = ImageIO.read(in);
}
} else {
texturePack = null;
}
} catch (IOException e) {
throw new RuntimeException("I/O error getting default texture map from minecraft.jar", e);
}
} else {
logger.warn("Minecraft installation not found; could not load default texture map!");
texturePack = null;
}
}
@Override
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
if ((texturePack != null) && (value != null)) {
setText(null);
Icon preview = iconCache.get((Theme) value);
if (preview == null) {
preview = new ImageIcon(((Theme) value).getPreview(texturePack));
iconCache.put((Theme) value, preview);
}
setIcon(preview);
}
return this;
}
private final BufferedImage texturePack;
private final Map<Theme, Icon> iconCache = new HashMap<>();
private static final org.slf4j.Logger logger = org.slf4j.LoggerFactory.getLogger(ThemeListCellRenderer.class);
private static final long serialVersionUID = 1L;
}