/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package org.nbstudio.cachefilesystem;
import java.awt.Color;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.awt.image.FilteredImageSource;
import java.awt.image.ImageFilter;
import java.awt.image.ImageProducer;
import java.awt.image.RGBImageFilter;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import javax.imageio.ImageIO;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.filechooser.FileView;
/**
*
* @author daimor
*/
public class CacheFileView extends FileView {
final static int fileIconWidth = 16;
final static int fileIconHeight = 16;
final static int countFilesIcons = 17;
final Icon[] filesIcons = new ImageIcon[countFilesIcons];
final static int FILE_ICON_INDEX_CONN = 2;
final static int FILE_ICON_INDEX_INC = 3;
final static int FILE_ICON_INDEX_INT = 4;
final static int FILE_ICON_INDEX_MAC = 5;
final static int FILE_ICON_INDEX_CLS = 7;
final static int FILE_ICON_INDEX_PKG = 10;
final static int FILE_ICON_INDEX_PRJ = 11;
final static int FILE_ICON_INDEX_BAS = 12;
final static Map<String, Integer> fileTypesIcon = new HashMap<>();
{
try {
fileTypesIcon.put("INC", FILE_ICON_INDEX_INC);
fileTypesIcon.put("INT", FILE_ICON_INDEX_INT);
fileTypesIcon.put("MAC", FILE_ICON_INDEX_MAC);
fileTypesIcon.put("CLS", FILE_ICON_INDEX_CLS);
fileTypesIcon.put("PKG", FILE_ICON_INDEX_PKG);
fileTypesIcon.put("PRJ", FILE_ICON_INDEX_PRJ);
fileTypesIcon.put("BAS", FILE_ICON_INDEX_BAS);
ImageFilter filter = new RGBImageFilter() {
int transparentColor = Color.white.getRGB() | 0xFF000000;
@Override
public final int filterRGB(int x, int y, int rgb) {
if ((x == 0) && (y == 0)) {
transparentColor = rgb;
}
if ((rgb | 0xFF000000) == transparentColor) {
return 0x00FFFFFF & rgb;
} else {
return rgb;
}
}
};
BufferedImage bi = ImageIO.read(getClass().getResource("/resources/files.bmp"));
ImageProducer filteredImgProd = new FilteredImageSource(bi.getSource(), filter);
Image transparentImg = Toolkit.getDefaultToolkit().createImage(filteredImgProd);
BufferedImage transparentBufImg = new BufferedImage(transparentImg.getWidth(null), transparentImg.getHeight(null), BufferedImage.TYPE_INT_ARGB);
transparentBufImg.getGraphics().drawImage(transparentImg, 0, 0, null);
for (int i = 0; i < countFilesIcons; i++) {
filesIcons[i] = new ImageIcon(transparentBufImg.getSubimage(fileIconWidth * i, 0, fileIconWidth, fileIconHeight));
}
} catch (IOException ex) {
}
}
@Override
public Icon getIcon(File f) {
if (f instanceof CacheRootFile) {
String fileName = f.getAbsolutePath();
fileName = fileName.replaceAll("^.*\\/(.*)$", "$1");
String fileExt = fileName.replaceAll("^.*\\.(.*)$", "$1").toUpperCase();
if (fileName.isEmpty()) {
return filesIcons[FILE_ICON_INDEX_CONN];
} else if (fileTypesIcon.containsKey(fileExt)) {
return filesIcons[fileTypesIcon.get(fileExt)];
} else {
return filesIcons[0];
}
}
return super.getIcon(f);
}
}