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.AbstractAction; 011import javax.swing.BorderFactory; 012import javax.swing.JButton; 013 014import org.openstreetmap.josm.actions.JosmAction; 015import org.openstreetmap.josm.actions.PreferencesAction; 016import org.openstreetmap.josm.data.preferences.NamedColorProperty; 017import org.openstreetmap.josm.gui.MainApplication; 018import org.openstreetmap.josm.gui.preferences.display.DrawingPreference; 019 020/** 021 * A button associated to an auto filter. If clicked twice, the filter is reset. 022 * @since 12400 023 */ 024public class AutoFilterButton extends JButton { 025 026 private static final NamedColorProperty PROP_COLOR = new NamedColorProperty("auto.filter.button.color", new Color(0, 160, 160)); 027 028 private final AutoFilter filter; 029 030 /** 031 * Constructs a new {@code AutoFilterButton}. 032 * @param filter auto filter associated to this button 033 */ 034 public AutoFilterButton(final AutoFilter filter) { 035 super(new JosmAction(filter.getLabel(), null, filter.getDescription(), null, false) { 036 @Override 037 public synchronized void actionPerformed(ActionEvent e) { 038 AutoFilterManager afm = AutoFilterManager.getInstance(); 039 if (filter.equals(afm.getCurrentAutoFilter())) { 040 afm.setCurrentAutoFilter(null); 041 MainApplication.getMap().filterDialog.getFilterModel().executeFilters(true); 042 } else { 043 afm.setCurrentAutoFilter(filter); 044 } 045 } 046 }); 047 this.filter = filter; 048 setForeground(Color.WHITE); 049 setContentAreaFilled(false); 050 setBorder(BorderFactory.createEmptyBorder(7, 7, 7, 7)); 051 } 052 053 @Override 054 protected void paintComponent(Graphics g) { 055 if (getModel().isPressed()) { 056 g.setColor(PROP_COLOR.get().darker().darker()); 057 } else if (getModel().isRollover() || AutoFilterManager.getInstance().getCurrentAutoFilter() == filter) { 058 g.setColor(PROP_COLOR.get().darker()); 059 } else { 060 g.setColor(PROP_COLOR.get()); 061 } 062 if (g instanceof Graphics2D) { 063 ((Graphics2D) g).setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); 064 } 065 g.fillRoundRect(0, 0, getWidth(), getHeight(), 3, 3); 066 super.paintComponent(g); 067 } 068 069 static AutoFilterButton forOsmKey(String key) { 070 final String name = key + ":"; 071 final AutoFilterButton button = new AutoFilterButton(new AutoFilter(key, "", null)); 072 button.setAction(new AbstractAction(name) { 073 @Override 074 public void actionPerformed(ActionEvent e) { 075 PreferencesAction.forPreferenceTab("", "null", DrawingPreference.class).actionPerformed(e); 076 } 077 }); 078 return button; 079 } 080}