// ContextMenu.java
package net.sf.gogui.gui;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.MessageFormat;
import java.util.ArrayList;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
import net.sf.gogui.game.MarkType;
import static net.sf.gogui.go.GoColor.BLACK;
import static net.sf.gogui.go.GoColor.WHITE;
import net.sf.gogui.go.GoPoint;
import static net.sf.gogui.gui.I18n.i18n;
import net.sf.gogui.util.Platform;
/** Context menu for fields on board. */
public class ContextMenu
extends JPopupMenu
{
/** Callback for events generated by ContextMenu. */
public interface Listener
{
void actionEditLabel(GoPoint point);
void actionMark(GoPoint point, MarkType type, boolean mark);
}
public ContextMenu(GoPoint point, boolean mark, boolean markCircle,
boolean markSquare, boolean markTriangle,
Listener listener)
{
m_point = point;
m_listener = listener;
m_actionListener = new ActionListener()
{
public void actionPerformed(ActionEvent event)
{
Listener listener = ContextMenu.this.m_listener;
if (listener == null)
return;
String actionCommand = event.getActionCommand();
if (actionCommand.equals("cancel"))
{
ContextMenu.this.setVisible(false);
}
else if (actionCommand.equals("mark"))
{
boolean mark
= ContextMenu.this.m_mark.isSelected();
listener.actionMark(m_point, MarkType.MARK, mark);
}
else if (actionCommand.equals("mark-circle"))
{
boolean mark
= ContextMenu.this.m_markCircle.isSelected();
listener.actionMark(m_point, MarkType.CIRCLE, mark);
}
else if (actionCommand.equals("mark-square"))
{
boolean mark
= ContextMenu.this.m_markSquare.isSelected();
listener.actionMark(m_point, MarkType.SQUARE, mark);
}
else if (actionCommand.equals("mark-triangle"))
{
boolean mark
= ContextMenu.this.m_markTriangle.isSelected();
listener.actionMark(m_point, MarkType.TRIANGLE, mark);
}
else if (actionCommand.equals("edit-label"))
{
listener.actionEditLabel(m_point);
}
}
};
setLabel(MessageFormat.format(i18n("LB_CONTEXTMENU_POINT"), point));
m_mark = createCheckBox("MN_CONTEXTMENU_MARK", "mark");
m_mark.setSelected(mark);
add(m_mark);
m_markCircle = createCheckBox("MN_CONTEXTMENU_MARK_CIRCLE",
"mark-circle");
m_markCircle.setSelected(markCircle);
add(m_markCircle);
m_markSquare = createCheckBox("MN_CONTEXTMENU_MARK_SQUARE",
"mark-square");
m_markSquare.setSelected(markSquare);
add(m_markSquare);
m_markTriangle = createCheckBox("MN_CONTEXTMENU_MARK_TRIANGLE",
"mark-triangle");
m_markTriangle.setSelected(markTriangle);
add(m_markTriangle);
add(createItem("MN_CONTEXTMENU_EDIT_LABEL", "edit-label"));
addSeparator();
add(createItem("LB_CANCEL", "cancel"));
}
public GoPoint getPointArg()
{
return m_point;
}
private final ActionListener m_actionListener;
private final GoPoint m_point;
private final JCheckBoxMenuItem m_mark;
private final JCheckBoxMenuItem m_markCircle;
private final JCheckBoxMenuItem m_markSquare;
private final JCheckBoxMenuItem m_markTriangle;
private final Listener m_listener;
private JCheckBoxMenuItem createCheckBox(String label,
String actionCommand)
{
JCheckBoxMenuItem item = new JCheckBoxMenuItem(i18n(label));
item.addActionListener(m_actionListener);
item.setActionCommand(actionCommand);
return item;
}
private JMenuItem createItem(String label, String actionCommand)
{
JMenuItem item = new JMenuItem(i18n(label));
item.addActionListener(m_actionListener);
item.setActionCommand(actionCommand);
return item;
}
}