package org.limewire.ui.swing.filter;
import java.awt.Color;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.Action;
import javax.swing.BorderFactory;
import javax.swing.Icon;
import javax.swing.JButton;
import javax.swing.JLabel;
import net.miginfocom.swing.MigLayout;
import org.jdesktop.application.Resource;
import org.jdesktop.swingx.JXPanel;
import org.jdesktop.swingx.painter.RectanglePainter;
import org.limewire.ui.swing.util.GuiUtils;
/**
* Display panel for an active filter.
*/
class ActiveFilterPanel extends JXPanel {
private static final int PREF_HEIGHT = 18;
private static final int HORIZ_INSET = 12;
@Resource(key="AdvancedFilter.filterWidth") private int filterWidth;
@Resource private Color backgroundColor;
@Resource private Color borderColor;
@Resource private Color textColor;
@Resource private Font textFont;
@Resource private Icon removeDefaultIcon;
@Resource private Icon removeHoverIcon;
private final JLabel label = new JLabel();
private final JButton removeButton = new JButton();
/**
* Constructs an ActiveFilterPanel with the specified remove action.
*/
public ActiveFilterPanel(Action removeAction) {
GuiUtils.assignResources(this);
setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 5));
setLayout(new MigLayout("insets 0 0 0 0, gap 0!",
"[left][right]", "[center]"));
setOpaque(false);
setBackgroundPainter(new RectanglePainter(0, 0, 0, 0, 16, 16, true,
backgroundColor, 1.0f, borderColor));
label.setBorder(BorderFactory.createEmptyBorder(0, 0, 1, 3));
label.setFont(textFont);
label.setForeground(textColor);
label.setHorizontalAlignment(JLabel.LEADING);
label.setVerticalAlignment(JLabel.CENTER);
label.setText((String) removeAction.getValue(Action.NAME));
label.setPreferredSize(new Dimension(label.getPreferredSize().width, PREF_HEIGHT));
removeButton.setAction(removeAction);
removeButton.setBorder(BorderFactory.createEmptyBorder(4, 5, 4, 5));
removeButton.setContentAreaFilled(false);
removeButton.setFocusPainted(false);
removeButton.setIcon(removeDefaultIcon);
removeButton.setText(null);
// Add listener to show cursor on mouse over.
removeButton.addMouseListener(new MouseAdapter() {
@Override
public void mouseEntered(MouseEvent e) {
removeButton.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
removeButton.setIcon(removeHoverIcon);
}
@Override
public void mouseExited(MouseEvent e) {
removeButton.setCursor(Cursor.getDefaultCursor());
removeButton.setIcon(removeDefaultIcon);
}
});
// Determine max label width.
int maxWidth = filterWidth - removeButton.getPreferredSize().width - HORIZ_INSET;
add(removeButton, "gap 0 0");
add(label , "wmax " + maxWidth + ", hmin " + PREF_HEIGHT);
}
}