All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.pms.medialibrary.gui.tab.dlnaview.DLNAViewTreeCellRenderer Maven / Gradle / Ivy

Go to download

PS3 Media Server is a cross-platform DLNA-compliant UPnP Media Server. Originally written to support the PlayStation 3, PS3 Media Server has been expanded to support a range of other media renderers, including smartphones, televisions, music players and more.

The newest version!
package net.pms.medialibrary.gui.tab.dlnaview;

import java.awt.Canvas;
import java.awt.Color;
import java.awt.Component;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;

import javax.imageio.ImageIO;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeCellRenderer;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import net.pms.medialibrary.commons.MediaLibraryConfiguration;
import net.pms.medialibrary.commons.dataobjects.*;
import net.pms.medialibrary.storage.MediaLibraryStorage;
import net.pms.plugins.FileDetailPlugin;
import net.pms.plugins.TreeEntry;

public class DLNAViewTreeCellRenderer extends DefaultTreeCellRenderer {
	private static final long serialVersionUID = 4620499669832969867L;
	private static final Logger log = LoggerFactory.getLogger(DLNAViewTreeCellRenderer.class);
	private String            iconsFolder      = "/resources/images/";

	private ImageIcon         fileFolderIcon;
	private ImageIcon         fileFolderEntryIcon;
	private ImageIcon         fileFolderFileSingleIcon;
	private ImageIcon         fileFolderFileMultipleIcon;

	public DLNAViewTreeCellRenderer() {
		fileFolderIcon = new ImageIcon(getClass().getResource(iconsFolder + "filefolder-16.png"));
		fileFolderEntryIcon = new ImageIcon(getClass().getResource(iconsFolder + "filefolderentry-16.png"));
		fileFolderFileSingleIcon = new ImageIcon(getClass().getResource(iconsFolder + "filefolderfile_single-16.png"));
		fileFolderFileMultipleIcon = new ImageIcon(getClass().getResource(iconsFolder + "filefolderfile_multiple-16.png"));
		
		setBackground(new Color(237, 243, 254));
	}

	private Icon createIcon(DOMediaLibraryFolder folder) {
		assert(folder != null);
		
		BufferedImage im = null;
		try {
			if(MediaLibraryConfiguration.getInstance().isMediaLibraryEnabled()){
    			switch (folder.getFileType()) {
    				case AUDIO:
    					im = ImageIO.read(getClass().getResource(iconsFolder + "audiofolder-16.png"));
    					break;
    				case VIDEO:
    					im = ImageIO.read(getClass().getResource(iconsFolder + "videofolder-16.png"));
    					break;
    				case PICTURES:
    					im = ImageIO.read(getClass().getResource(iconsFolder + "picturesfolder-16.png"));
    					break;
    				case FILE:
    					im = ImageIO.read(getClass().getResource(iconsFolder + "nofilefilter_folder-16.png"));
    					break;
    			}
			
    			int w = 5;
    			int h = 3;
    			int hFull = 16;
    			if(folder.isInheritsConditions()){
    				Graphics2D g = im.createGraphics();
    				g.setColor(new Color(150, 64, 80));
    				g.fillRect(0, hFull - 3 * h, w, h);
    				g.dispose();
    				
    			}
    			if(folder.getFilter().getConditions().size() > 0){
    				Graphics2D g = im.createGraphics();
    				g.setColor(new Color(255, 0, 0));
    				g.fillRect(0, hFull - 3 * h + h /2, w, 1);
    				g.dispose();				
    			}
    			
    			if(folder.isInheritSort()){
    				Graphics2D g = im.createGraphics();
    				g.setColor(new Color(102, 132, 244));
    				g.fillRect(0, hFull - 2 * h, w, h);
    				g.dispose();				
    			}
    			if(folder.isInheritDisplayFileAs()){
    				Graphics2D g = im.createGraphics();
    				g.setColor(new Color(101, 196, 88));
    				g.fillRect(0, hFull - h, w, h);
    				g.dispose();
    			}
			} else {
				im = ImageIO.read(getClass().getResource(iconsFolder + "nofilefilter_folder-16.png"));
			}
		} catch (Exception e) {
			log.error(String.format("Failed to create icon for folder with id=%s, name=%s", folder.getId(), folder.getDisplayProperties().getDisplayNameMask()));
		}
		
		Icon res;
		if(im == null){
			res = new ImageIcon();
		} else {
			res = new ImageIcon(im);
		}

		return res;
	}

	@Override
	public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) {

		super.getTreeCellRendererComponent(tree, value, selected, expanded, leaf, row, hasFocus);
		setIcon(getIconToDisplay(value));

		// set background color
		if (value instanceof DefaultMutableTreeNode) {
			Object userObject = ((DefaultMutableTreeNode) value).getUserObject();
			if (userObject instanceof DOMediaLibraryFolder) {
				DOMediaLibraryFolder folder = (DOMediaLibraryFolder) userObject;
				long rootFolderId = MediaLibraryStorage.getInstance().getRootFolderId();
				setOpaque(folder.getId() == rootFolderId && !selected);
			}
		}
		return this;
	}

	public Icon getIconToDisplay(Object value) {
		Icon icon = null;
		if (value instanceof DLNAViewFileMutableTreeNode) {
			icon = fileFolderFileSingleIcon;
		} else if (value instanceof DefaultMutableTreeNode) {
			Object userObject = ((DefaultMutableTreeNode) value).getUserObject();
			if (userObject instanceof DOMediaLibraryFolder) {
				icon = createIcon((DOMediaLibraryFolder) userObject);
			} else if (userObject instanceof DOFileEntryFolder) {
				icon = fileFolderIcon;
			} else if (userObject instanceof DOFileEntryInfo) {
				icon = fileFolderEntryIcon;
			} else if (userObject instanceof DOFileEntryFile) {
				DOFileEntryFile fef = (DOFileEntryFile) userObject;
				switch (fef.getFileDisplayMode()) {
					case MULTIPLE:
						icon = fileFolderFileMultipleIcon;
						break;
					default:
						icon = fileFolderFileSingleIcon;
						break;
				}
			} else if (userObject instanceof DOFileEntryPlugin && ((DOFileEntryPlugin) userObject).getPlugin() != null) {
				icon = ((DOFileEntryPlugin) userObject).getPlugin().getTreeIcon();
			} else if (userObject instanceof DOSpecialFolder) {
				DOSpecialFolder sf = (DOSpecialFolder)userObject;
    			if(sf.getSpecialFolderImplementation() != null && sf.getSpecialFolderImplementation().getTreeNode() == null){
    				icon = getNoChildPossibleIcon(sf.getSpecialFolderImplementation().getTreeNodeIcon());
    			}else {
    				icon = sf.getSpecialFolderImplementation().getTreeNodeIcon();    				
    			}
			} else if (userObject instanceof TreeEntry) {
				TreeEntry te = (TreeEntry) userObject;
				if(te.getUserObject() instanceof FileDetailPlugin && ((FileDetailPlugin) te.getUserObject()).getTreeNode() == null){
					icon = getNoChildPossibleIcon(te.getIcon());
				} else {
					icon = te.getIcon();					
				}
			}
		}
		return icon;
	}
	
	private Icon getNoChildPossibleIcon(Icon icon){
		BufferedImage im = new BufferedImage( icon.getIconWidth(), icon.getIconHeight(), BufferedImage.TRANSLUCENT );
		Graphics2D g = im.createGraphics();
		icon.paintIcon( new Canvas(), g, 0, 0 );
		g.setColor(new Color(149, 149, 149));
		g.fillRect(13, 13, 3, 3);
		g.dispose();		
		return new ImageIcon(im);		
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy