/*
* Copyright (C) 2006 Sun Microsystems, Inc. All rights reserved. Use is
* subject to license terms.
*/
package se.sics.gvod.system.swing;
import java.awt.Color;
import java.awt.Component;
import java.awt.Image;
import javax.swing.GroupLayout;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.ListCellRenderer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* ListCellRenderer.
*
* @author sky
*/
final class MenuEntryListCellRenderer extends JPanel implements ListCellRenderer {
private static final Logger logger = LoggerFactory.getLogger(MenuEntryListCellRenderer.class);
private JLabel menuEntryLabel;
private JLabel closeLabel;
// private Image closeIcon;
MenuEntryListCellRenderer() {
menuEntryLabel = new JLabel(" ");
closeLabel = new JLabel(" ");
// connectedBar.setBackground(Color.WHITE);
// connectedBar.setBorder(new LineBorder(Color.BLACK));
GroupLayout layout = new GroupLayout(this);
setLayout(layout);
layout.setAutoCreateContainerGaps(true);
layout.setAutoCreateGaps(true);
GroupLayout.SequentialGroup hg = layout.createSequentialGroup();
layout.setHorizontalGroup(hg);
hg.addGroup(layout.createParallelGroup().
addComponent(menuEntryLabel, 5, 10, 400));
hg.addGroup(layout.createParallelGroup().
addComponent(closeLabel, 5, 10, 20));
GroupLayout.ParallelGroup vg = layout.createParallelGroup();
layout.setVerticalGroup(vg);
vg.addGroup(layout.createSequentialGroup().
addComponent(menuEntryLabel));
vg.addGroup(layout.createSequentialGroup().
addComponent(closeLabel));
setOpaque(true);
}
@Override
public Component getListCellRendererComponent(JList list, Object value,
int index, boolean isSelected, boolean cellHasFocus) {
if (value == null) {
return this;
}
MenuEntry entry = (MenuEntry) value;
if (entry.isHidden()) {
return this;
}
String menuName = entry.getName();
menuEntryLabel.setText(menuName);
if (isSelected) {
adjustColors(list.getSelectionBackground(),
list.getSelectionForeground(), this, menuEntryLabel, closeLabel);
} else {
adjustColors(list.getBackground(),
list.getForeground(), this, menuEntryLabel, closeLabel);
}
return this;
}
private void adjustColors(Color bg, Color fg, Component... components) {
for (Component c : components) {
c.setForeground(fg);
c.setBackground(bg);
}
}
}