/*
* $Id$
*
* Copyright (c) 2008 by Joel Uckelman
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License (LGPL) as published by the Free Software Foundation.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, copies are available
* at http://www.opensource.org.
*/
package VASSAL.tools.menu;
import java.lang.ref.WeakReference;
import javax.swing.JComponent;
import javax.swing.JMenu;
/**
* @author Joel Uckelman
* @since 3.1.0
*/
public class MenuProxy extends AbstractParent<JMenu> {
private String text;
private char mnemonic=0;
public MenuProxy() { }
public MenuProxy(String text) {
this.text = text;
}
public SeparatorProxy addSeparator() {
final SeparatorProxy sep = new SeparatorProxy();
add(sep);
return sep;
}
public SeparatorProxy insertSeparator(int pos) {
final SeparatorProxy sep = new SeparatorProxy();
insert(sep, pos);
return sep;
}
public String getText() {
return text;
}
public void setText(final String text) {
this.text = text;
forEachPeer(new Functor<JMenu>() {
public void apply(JMenu menu) {
menu.setText(text);
}
});
}
@Override
public JMenu createPeer() {
final JMenu menu = new JMenu(text);
if (mnemonic != 0) {
menu.setMnemonic(mnemonic);
}
for (ChildProxy<?> child : children) {
final JComponent peer = child.createPeer();
if (peer != null) menu.add(peer);
}
peers.add(new WeakReference<JMenu>(menu, queue));
return menu;
}
public void setMnemonic(final char mnemonic) {
this.mnemonic = mnemonic;
forEachPeer(new Functor<JMenu>() {
public void apply(JMenu menu) {
menu.setMnemonic(mnemonic);
}
});
}
}