package org.limewire.ui.swing.action;
import javax.swing.Action;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import org.limewire.ui.swing.components.PlainCheckBoxMenuItemUI;
import org.limewire.ui.swing.components.PlainMenuItemUI;
import org.limewire.ui.swing.components.PlainMenuUI;
import org.limewire.ui.swing.components.PlainWindowsCheckBoxMenuItemUI;
import org.limewire.ui.swing.components.PlainWindowsMenuItemUI;
import org.limewire.ui.swing.components.PlainWindowsMenuUI;
import org.limewire.ui.swing.util.GuiUtils;
import org.limewire.ui.swing.util.SwingHacks;
/**
* Allows the text of the menu to have an ampersand to
* mark the mnemonic of its name.
*/
public class MnemonicMenu extends JMenu {
public MnemonicMenu(String text) {
super(text);
SwingHacks.fixPopupMenuForWindows(getPopupMenu());
}
@Override
public void updateUI() {
super.updateUI();
overrideMenu(this);
}
@Override
public void setText(String text) {
int mnemonicKeyCode = GuiUtils.getMnemonicKeyCode(text);
text = GuiUtils.stripAmpersand(text);
if (mnemonicKeyCode != -1) {
setMnemonic(mnemonicKeyCode);
}
super.setText(text);
}
@Override
public JMenuItem add(Action action) {
JMenuItem item = super.add(action);
overrideMenu(item);
return item;
}
@Override
public JMenuItem add(JMenuItem item) {
JMenuItem itemReturned = super.add(item);
overrideMenu(item);
return itemReturned;
}
private void overrideMenu(JMenuItem item) {
Class originalUIClass = item.getUI().getClass();
if (originalUIClass == PlainCheckBoxMenuItemUI.class.getSuperclass()) {
item.setUI(new PlainCheckBoxMenuItemUI());
} else if (originalUIClass == PlainMenuUI.class.getSuperclass()) {
item.setUI(new PlainMenuUI());
} else if (originalUIClass == PlainMenuItemUI.class.getSuperclass()) {
item.setUI(new PlainMenuItemUI());
} if (originalUIClass == PlainWindowsCheckBoxMenuItemUI.class.getSuperclass()) {
item.setUI(new PlainWindowsCheckBoxMenuItemUI());
} else if (originalUIClass == PlainWindowsMenuUI.class.getSuperclass()) {
item.setUI(new PlainWindowsMenuUI());
} else if (originalUIClass == PlainWindowsMenuItemUI.class.getSuperclass()) {
item.setUI(new PlainWindowsMenuItemUI());
}
}
}