001// License: GPL. For details, see LICENSE file.
002package org.openstreetmap.josm.gui.autofilter;
003
004import java.awt.Color;
005import java.awt.Graphics;
006import java.awt.Graphics2D;
007import java.awt.RenderingHints;
008import java.awt.event.ActionEvent;
009
010import javax.swing.BorderFactory;
011import javax.swing.JButton;
012
013import org.openstreetmap.josm.actions.JosmAction;
014import org.openstreetmap.josm.data.preferences.NamedColorProperty;
015import org.openstreetmap.josm.gui.MainApplication;
016
017/**
018 * A button associated to an auto filter. If clicked twice, the filter is reset.
019 * @since 12400
020 */
021public class AutoFilterButton extends JButton {
022
023    private static final NamedColorProperty PROP_COLOR = new NamedColorProperty("auto.filter.button.color", new Color(0, 160, 160));
024
025    private final AutoFilter filter;
026
027    /**
028     * Constructs a new {@code AutoFilterButton}.
029     * @param filter auto filter associated to this button
030     */
031    public AutoFilterButton(final AutoFilter filter) {
032        super(new JosmAction(filter.getLabel(), null, filter.getDescription(), null, false) {
033            @Override
034            public synchronized void actionPerformed(ActionEvent e) {
035                AutoFilterManager afm = AutoFilterManager.getInstance();
036                if (filter.equals(afm.getCurrentAutoFilter())) {
037                    afm.setCurrentAutoFilter(null);
038                    MainApplication.getMap().filterDialog.getFilterModel().executeFilters();
039                } else {
040                    afm.setCurrentAutoFilter(filter);
041                }
042            }
043        });
044        this.filter = filter;
045        setForeground(Color.WHITE);
046        setContentAreaFilled(false);
047        setBorder(BorderFactory.createEmptyBorder(7, 7, 7, 7));
048    }
049
050    @Override
051    protected void paintComponent(Graphics g) {
052        if (getModel().isPressed()) {
053            g.setColor(PROP_COLOR.get().darker().darker());
054        } else if (getModel().isRollover() || AutoFilterManager.getInstance().getCurrentAutoFilter() == filter) {
055            g.setColor(PROP_COLOR.get().darker());
056        } else {
057            g.setColor(PROP_COLOR.get());
058        }
059        if (g instanceof Graphics2D) {
060            ((Graphics2D) g).setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
061        }
062        g.fillRoundRect(0, 0, getWidth(), getHeight(), 3, 3);
063        super.paintComponent(g);
064    }
065}