package jas.util; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Observable; import java.util.Observer; import javax.swing.JCheckBoxMenuItem; public class JASCheckboxMenuItem extends JCheckBoxMenuItem implements Observer,ActionListener,JASCheckboxState, CommandSource { public JASCheckboxMenuItem() { super(); setEnabled(false); Application.getApplication().getCommandManager().add(this); addActionListener(this); } public JASCheckboxMenuItem(String s, char mnemonic) { super(s); setMnemonic(mnemonic); setEnabled(false); Application.getApplication().getCommandManager().add(this); // register with CommandTargetManager addActionListener(this); } public void actionPerformed(ActionEvent evt) { m_target.invoke(getState()); } public void setCheckbox(boolean state) { setState(state); } public boolean setTarget(CommandTarget t) { if (t instanceof BooleanCommandTarget) { m_target = (BooleanCommandTarget) t; m_target.enable(this); return true; } else return false; } public void clearTarget() { m_target = null; setEnabled(false); } public CommandTarget getTarget() { return m_target; } public String getCommand() { return getText(); } public void update(Observable o, Object arg) { m_target.enable(this); } public void setEnabled(boolean state) { if (correspondingToolBarFloating) { //We need to do this since when the menu is refreshed calling setEnabled //wipes out the previous setting, which we might have adjusted based on whether //the user has undocked the corresponding toolbar IF this JASCheckboxMenuItem //controls the visibility of a toolbar. (Yes, this is a bit ugly but when we //move to JDK 1.2 this issue will go away.) super.setEnabled(false); } else { super.setEnabled(state); } } public void setCorrespondingToolBarFloating(boolean state) { correspondingToolBarFloating = state; } private boolean correspondingToolBarFloating = false; private BooleanCommandTarget m_target = null; }