/* * DrakkarKeel - An Enterprise Collaborative Search Platform * * The contents of this file are subject under the terms described in the * DRAKKARKEEL_LICENSE file included in this distribution; you may not use this * file except in compliance with the License. * * 2013-2014 DrakkarKeel Platform. */ package drakkar.cover.swing; import drakkar.oar.util.ImageUtil; import java.awt.Component; import java.awt.image.BufferedImage; import java.util.ArrayList; import javax.swing.ImageIcon; import javax.swing.JLabel; import javax.swing.JList; import javax.swing.ListCellRenderer; public class GenericCheckListRender extends JLabel implements ListCellRenderer { // TODO: encontrar met resize más eficiente, validar con imágenes h=0 y w=0(Error), // si la icon tiene las dimensiones establecidas no redimensionar private ArrayList<ItemSelectable> values; private int widthIcon; private int heightIcon; private ImageIcon defaultImage; /** * Constructor por defecto de la clase */ public GenericCheckListRender() { super(); this.values = new ArrayList<>(); this.defaultImage = new ImageIcon(); this.heightIcon = 16; this.widthIcon = 16; } /** * Constructor de la clase * * @param values lista de objetos */ public GenericCheckListRender(ArrayList<ItemSelectable> values) { super(); this.values = new ArrayList<>(); for (ItemSelectable item : values) { this.values.add(item); } this.defaultImage = new ImageIcon(); this.heightIcon = 16; this.widthIcon = 16; } /** * Adiciona un objeto * * @param item objeto */ public void add(ItemSelectable item) { this.values.add(item); } /** * Adiciona un objeto * * @param index * @param item objeto */ public void add(int index, ItemSelectable item) { this.values.add(index, item); } /** * Devuelve la lista de objetos * * @return objetos */ public ArrayList<ItemSelectable> getValues() { return this.values; } /** * Modifica la lista de objetos * * @param values nueva lista de objetos */ public void setValues(ArrayList<ItemSelectable> values) { this.values = values; } /** * Actualiza el valor del objeto * * @param item objeto * * @return true si se modifico el objeto, false en caso contrario */ public boolean update(ItemSelectable item) { int index = this.values.indexOf(item); if (index >= 0) { this.values.set(index, item); return true; } else { return false; } } /** * Actualiza el valor del objeto * * @param index * @param item objeto * * */ public void set(int index, ItemSelectable item) { this.values.set(index, item); } /** * Elimina el objeto de la lista de objetos del render * * @param item usuario */ public void remove(ItemSelectable item) { this.values.remove(item); } /** * * @param item * @return */ public boolean contains(ItemSelectable item){ return this.values.contains(item); } /** * Elimina todos los objetos del modelo */ public void clear() { this.values.clear(); } /** * * @return */ public int getHeightIcon() { return heightIcon; } /** * Modifica el valor de la altura de los iconos a mostrar * * @param heightIcon nueva altura */ public void setHeightIcon(int heightIcon) { this.heightIcon = heightIcon; } /** * Devuelve el valor de la altura de los iconos a mostrar. Por defecto 16x16 pixel * * @return altura */ public int getWidthIcon() { return widthIcon; } /** * Modifica el valor del ancho de los iconos a mostrar * * @param widthIcon */ public void setWidthIcon(int widthIcon) { this.widthIcon = widthIcon; } /** * Devuelve la imagen del icono por defecto * * @return icono */ public ImageIcon getDefaultImage() { return defaultImage; } /** * Modifica la imagen del icono por defecto * * @param defaultImage */ public void setDefaultImage(ImageIcon defaultImage) { this.defaultImage = defaultImage; } public Component getListCellRendererComponent(JList list, Object value, // value to display int index, // cell index boolean isSelected, // is the cell selected boolean cellHasFocus) { // the list and the cell have the focus ItemSelectable item = ((ItemSelectable) value); String s = item.getLabel(); setText(s); ImageIcon icon = null; try { icon = item.getIcon(); if (icon != null && icon.getIconWidth() > this.widthIcon && icon.getIconHeight() > this.heightIcon) { BufferedImage resized = ImageUtil.getFasterScaledInstance(ImageUtil.makeBufferedImage(icon.getImage()), this.widthIcon, this.heightIcon, java.awt.RenderingHints.VALUE_INTERPOLATION_BILINEAR, false); icon = new ImageIcon(resized); item.setIcon(icon); } else if (icon == null) { icon = defaultImage; } } catch (Exception e) { e.printStackTrace(); } setIcon(icon); if (isSelected) { setBackground(list.getSelectionBackground()); setForeground(list.getSelectionForeground()); } else { setBackground(list.getBackground()); setForeground(item.getColor()); } setToolTipText(item.getToolTip()); setEnabled(((ItemSelectable) value).isEnabled()); setFont(list.getFont()); setOpaque(true); return this; } }