1 package org.columba.core.gui.toolbar; 17 18 import java.awt.Insets ; 19 import java.awt.event.ItemEvent ; 20 import java.awt.event.ItemListener ; 21 import java.beans.PropertyChangeListener ; 22 import java.lang.reflect.Proxy ; 23 24 import javax.swing.Action ; 25 import javax.swing.Icon ; 26 import javax.swing.ImageIcon ; 27 import javax.swing.JToggleButton ; 28 29 import org.columba.core.gui.action.AbstractSelectableAction; 30 import org.columba.core.gui.base.ButtonStateAdapter; 31 import org.columba.core.gui.base.ImageUtil; 32 33 34 46 public class ToggleToolbarButton extends JToggleButton { 47 50 public ToggleToolbarButton() { 51 super(); 52 setRequestFocusEnabled(false); 53 } 54 55 58 public ToggleToolbarButton(Icon icon) { 59 super(icon); 60 setRequestFocusEnabled(false); 61 } 62 63 66 public ToggleToolbarButton(AbstractSelectableAction action) { 67 super(action); 68 setRequestFocusEnabled(false); 69 setMargin(new Insets (1, 1, 1, 1)); 70 71 setText(""); 73 74 ImageIcon icon = (ImageIcon ) action.getValue(Action.SMALL_ICON); 75 76 if (icon != null) { 77 setIcon(icon); 78 79 setDisabledIcon(ImageUtil.createTransparentIcon((ImageIcon ) icon)); 81 } 82 83 getModel().addItemListener(new ItemListener () { 84 public void itemStateChanged(ItemEvent e) { 85 AbstractSelectableAction a = (AbstractSelectableAction) getAction(); 86 87 if (a != null) { 88 a.setState(e.getStateChange() == ItemEvent.SELECTED); 89 } 90 } 91 }); 92 } 93 94 public boolean isFocusTraversable() { 95 return isRequestFocusEnabled(); 96 } 97 98 101 protected PropertyChangeListener createActionPropertyChangeListener( 102 Action a) { 103 return (PropertyChangeListener ) Proxy.newProxyInstance(getClass() 104 .getClassLoader(), 105 new Class [] { PropertyChangeListener .class }, 106 new ButtonStateAdapter(this, 107 super.createActionPropertyChangeListener(a))); 108 } 109 110 113 protected void configurePropertiesFromAction(Action a) { 114 super.configurePropertiesFromAction(a); 115 setSelected(((AbstractSelectableAction) a).getState()); 116 } 117 } 118 | Popular Tags |