/* * This file is part of muCommander, http://www.mucommander.com * Copyright (C) 2002-2010 Maxence Bernard * * muCommander is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * muCommander is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package com.mucommander.ui.quicklist; import com.mucommander.ui.quicklist.item.DataList; import javax.swing.*; import java.awt.*; /** * * @author Arik Hadas */ public abstract class GenericPopupDataListWithIcons extends DataList { public abstract Icon getImageIconOfItem(final Object item); public GenericPopupDataListWithIcons() { super(); setCellRenderer(new CellWithIconRenderer()); } public GenericPopupDataListWithIcons(Object[] data) { super(data); setCellRenderer(new CellWithIconRenderer()); } private class CellWithIconRenderer extends DefaultListCellRenderer { @Override public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { // Let superclass deal with most of it... super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); // Add its icon Object item = list.getModel().getElementAt(index); Icon icon = getImageIconOfItem(item); setIcon(resizeIcon(icon)); return this; } private Icon resizeIcon(Icon icon) { if (icon instanceof ImageIcon) { Image image = ((ImageIcon) icon).getImage(); final Dimension dimension = this.getPreferredSize(); final double height = dimension.getHeight(); final double width = (height / icon.getIconHeight()) * icon.getIconWidth(); image = image.getScaledInstance((int)width, (int)height, Image.SCALE_SMOOTH); return new ImageIcon(image); } return icon; } } }